我想将Git用于我自己的目的,我必须在我公司使用Subversion存储库。我知道有'git svn'命令,但它也需要git repository中的lineral历史记录。问题是我想: - 将git存储库与我的远程磁盘上的另一个我的git存储库同步,以便我可以将它与另一台计算机上的另一个git存储库同步, - 而且最重要的是:我想经常在我的git存储库中提交,当我决定这些小步骤值得提交(大到可以共享)时,我想将它们提交给svn但只有一个提交...所以我不想在svn中显示我所有的git(mayby有时是愚蠢的,太小的提交只是为了记住一些东西), - 并且使用'git svn'我不能使用分支(因为当我将它们与master合并时,master将不具有lineral历史记录)。
请帮助...也许有一些工作流程,我可以使用git在它的全部荣耀和svn更大的承诺(不是我的'私人'...可能非常小的变化,并且有一段时间casue那个鳕鱼没有“编译”更改到我的公司存储库。
提前致谢!
答案 0 :(得分:8)
我想将git存储库与我的远程磁盘上的另一个git存储库同步,以便我可以将它与另一台计算机上的另一个git存储库同步。
尝试:
git remote add external-repo ssh://host/path/to/git/repo.git
git push origin external-repo
我想经常在我的git存储库中提交,当我确定这些小步骤值得提交(大到足以分享)时,我想将它们提交给svn,但只提交一次。
没有汗水。使用git rebase -i
折叠多个提交(这称为“压缩”)并决定是要保留,丢弃还是将每个提交压缩成更大的提交。在推送到外部回购之前组织起来非常有帮助。 -i
用于“交互式”模式。
使用'git svn'我不能使用分支(因为当我将它们与master合并时,master将没有lineral历史记录)。
那不是真的。只需在git
上为要跟踪svn
的每个分支设置一个分支。在相反的方向,无论如何你一次只推动一个分支。
答案 1 :(得分:2)
我一直在我的公司工作(真的不能忍受颠覆)。是什么让你认为你不能使用git svn分支?你不仅可以使用它们,还可以直接将它们提交给颠覆。
要进行提交的合并,您可以使用像git rebase remotes/trunk --interactive
这样的东西和压缩提交。但是,您无法同时维护扩展版本和精简版本。你要么得到所有小小的提交,要么得到压扁的提交。
答案 2 :(得分:2)
您也可以在“官方”分支上使用git merge --squash
,而不是交互式rebase。
git checkout master
git merge --squash development
这样做的好处是它不会破坏您的开发历史记录。您现在可以创建一个包含所有更改的大型提交,或者您可以重置索引(使用git reset
)并使用git add -p
或git gui
从分支创建任意数量的单独提交,然后,您会在适当时正常提交master
和git-svn dcommit
。
答案 3 :(得分:1)
我所做的(以及最简单的方法)是不要尝试一次管理两种源控制方法。我使用git进行个人版本控制。一周几次,当我准备好提交到中央存储库时,我在git中查看master分支并将其提交给TFS。来自服务器的更改将签出到我的dev分支并合并回我的代码。
无论如何,它并不优雅,但由于我只是每周几次从中央报道结帐/签到,所以效果非常好。