Git clone repository into root of other repository?
If I have an empty repository
git init and I want to pull in another repository to be used only for pulling in updates how can I do this if I want the files to be in the root directory?
cd ~/repositories mkdir newrepo cd newrepo git init echo "testfile" > readme.md git add . git remote add <whatever> git push -u origin master #ok so that part works fine #now we have our repository at <my_other_repository> that looks like #a_root_file.ext #directory/another_file.ext #so now I want to run something like: git clone <my_other_repository> #and end up with: #readme.md #a_root_file.ext #directory/another_file.ext #if I then run echo "edited testfile" > readme.md git status #I want to be told that #untracked changes #newfile: a_root_file.ext #newfile: directory/another_file.ext #modified: readme.md #running git commit -a -m "Some files from another repository" git push #should push everything up to the <whatever> repository #then I want to be able to run git pull <my_other_repository_name> # and have it pull in any upstream changes
Is this something it is possible to setup?
I imagine I could work around it slightly by having a “wrapper directory”
cd ~/repositories mkdir newrepo cd newrepo git init git remote add <whatever> mkdir wrapper #this will now be the root of my project cd wrapper echo "testfile" > readme.md cd ../ git add . git push -u origin master
I should then be able to run
git clone <my_other_repository> without issue but this will only work if I only want to merge in one repository, and I am wanting to merge in several repositories and I also wonder what would be tracking the changes since there are now two repositories watching the same files, would both track them? or would
<whatever> say “hey these are under this repository, so we won’t track it!”?
2 Solutions collect form web for “Git clone repository into root of other repository?”
I’m not quite sure exactly what you’re asking for here, but you should be aware that you can have more than one
remote. For example, you could:
git remote add another <my_other_repository>
Then, you can pull in updates using
git fetch another. You can then merge in updates using:
git merge another/master
to merge updates from your other repository into your local repository.
I think the best way to accomplish this would be to have two repositories — but have one of them be a fork of the other and then pull commits from one into the other.
Having two different repositories where one is a fork of the other ensures that individual commits are easily tracked between the two. If you have two different repositories, then you may have to pull changes from one to the other as a new commit — rather than simply merging individual commits between the two.
I’d envision the steps would be:
- Create the first repository and push it to
origin(I’ll assume you’re using github for now). This is the <whatever> repository in your scenario.
- Fork the repository. This becomes the <*my_other_repository*> repository.
- Then commit changes as you want in whichever repository you want.
- Then ‘pull’ changes between them as you want.
This approach gives you a lot of flexibility when ensuring that all the commits go between repositories easily and intact. (In your scenario above, commits in the new repository actually become different git commits — this can lose information about each individual commit in some cases.)
Another benefit to this approach is that it’s pretty easy to expand to having 3, 4, 5 or however many other repositories instead of just 2. You can also designate one person to handle merges to the main repository so they can act as ‘traffic cop’ and reject some changes if it makes sense.
Best of luck –