Concurrently manage single project across different SCM systems
I currently have a project hosted on a private Git repo which I manage using sourcetree. Recently I decided to collaborate with a group of friends on this project. However they prefer Mercurial & SVN to Git and I’d rather have separate Mercurial & SVN repositories created with my project for them to collaborate on while maintaining my own Git repo. I was wondering if it would be possible to do the following via Sourcetree or any other method:
Have a single project folder on my work system that tracks my projects onto all three repo’s (Git /Mercurial / SVN) concurrently?
- Git: Same feature on multiple branches, but not on master
- Not able to read Git Environment variables Jenkins using Groovy Jenkinsfile
- Order git diff --name-only list by commit/merge date
- gitignore how to ignore a file and not a directory tree
- Git diff to alert hacks
- Restore modification times after vc operations
If 1. is possible, can I then selectively pull changes from either of the versioning systems and also selectively push changes to them ?
I’m using Sourcetree on Mac.
I came across an article by a user who does this for separate repositories on github and bitbucket but I can’t recollect the link to share here.
I’m hoping to find a good way to do this to make managing code easier.
Pardon me if such a question doesn’t belong here, the mod’s may close this.
Any help is appreciated 🙂
2 Solutions collect form web for “Concurrently manage single project across different SCM systems”
I strongly recommend do not mix in single working directory 2 or 3 different VCS. It’s just additional headache for maintaining transparent oneness for different engines.
Free working directory for you (all – Git-centric) is more manageable and less chaotic solution:
- just add single additional remote for each “foreign” repositories – “Mercurial-source” and “SVN-source”;
- pull “others” repos, push to “own”
SVN-link can be supported by git-svn, Mercurial-link (from Git side) by “Mercurial bridge”
Actually, by directly using git repository, hg can access it finely with hg-git extension. But if your intention is to maintain two repository, I think it is feasible too.
Indeed, in a folder, it can have .hg folder for mercurial, .git folder for git, if you mean that. Actually, hg and git distinguish working directory and repository, so this folder can hold different repositories.
For the second question, I think you need to set up some hooks in both hg and git, and let them communicate through hg-git extension of hg, when a push happens in any system. As far as I know, this extension works well.
But for SVN, things go different. Although both hg and git have svn extensions (hgsubversion and git-svn; extension here is a general idea, not specific to hg-like extension) , DVCS systems will branch easily and that causes mapping to svn a bit complex.
Thus, I think hg and git repositories in one folder is feasible through hg-git extension and hooks, and not quite sure about svn.