Multiple projects in one git repo?
I'm an SVN user at the moment and looking at moving my projects to git.
I use one SVN repository to hold all the projects I create. My structure is something like this:
/
/group1
/subgroup1
/project1
/branches
...
/tags
...
/trunk
...
/project2
...
/subgr开发者_如何学JAVAoup2
/project3
...
/project4
...
/group2
/subgroup3
...
/subgroup4
...
/lib
/lib1
/lib2
/lib3
As you can see I keep my projects in groups and /lib
contains libraries shared between projects.
I chose this sort structure because:
- Similar repo structure was used in the company where I learned to use SVN.
- Allows me to have an
svnserve
running as a service/daemon on my machine with all projects hosted on it (I don't like filepath approach).
Now... to the point. I was wondering:
How this sort of workflow would work if I were to move to git?
Specifically:
- Would it be simple to migrate the repo tree to git?
- Assuming each project requires separate repo*, how would I be able to serve them all (ideally grouped in similar fashion) via
svnserve
git equivalent.
*) I read about git and I understand that is the case, but I wanted to double check with experienced people.
In Git, it is better to have each project in its own repo, and the libraries in another repo if needed and used as submodules ( equivalent of svn externals) in each project.
This is because in Git, a repo is a much more lightweight concept than SVN and also, more importantly, there is no ability to clone individual folders ( not to be confused with sparse checkout) within a repo separately like you are able to checkout and work on individual folders in SVN. So if you had all projects in a single repo, you will have to clone them all.
Serving Git repos, using smart-http, git daemon and ssh is pretty straightforward. There is also Gitolite for managing multiple repos ( including authorization and authentication). Read the linked chapter on ProGit on serving Git repos- http://progit.org/book/ch4-2.html
Coming to your grouping, you can put the repos in folders as per your grouping structure, and serve using, say smart http method, whereby the repo urls will look like the urls that you would have used with SVN, will all projects seeming to be under the grouping etc.
In addition to the other answers, you can also use GitSlave to link multiple git repos together.
You could have all the projects in one repository, but it's really bad idea, because you always have to work with the whole repo.
To run a git server, if you need just one user (you), a server with installed git and ssh access is enough. See for example this article.
精彩评论