80
votes

I've been using SVN for all my projects. Sometimes project B is originating as a copy from project A. When project A has a generic change, I can use svn merge A within directory B and it will merge those changes.

Now, if I wanted to use git. I don't like having all my projects in the same repository since I then have to clone everything and can't pick just one project like in SVN. But having one repository for each project, how do I go about doing the same like I did earlier with SVN?

The question is: What's the best way to structure it if I want several subprojects that really all relates to one original project and to keep them in sync? And that I also want to be able to check them out separately

1
You'd probably better have a look at git-submodule (kernel.org/pub/software/scm/git/docs/git-submodule.html).Cascabel
@Jefromi but the source files are basically from the same history, this would mean I have two copies of the files? I think submodule is more for keeping track of external libraries that you include as separate files (not merge)?baloo
Never mind, I didn't see that you said B was a copy of A. Reading your "the question is", where you said "subprojects...relating to one original project...in sync" I assumed you meant taking out chunks of that original project, but keeping them in sync in the metaproject.Cascabel

1 Answers

146
votes

If you have two projects, proj1 and proj2 and want to merge changes of proj1 into proj2, you would do it like this:

# in proj2:
git remote add proj1 path/to/proj1
git fetch proj1
git merge proj1/master # or whichever branch you want to merge

I believe this does the same thing as what you were doing with SVN.