git svn clone svn_repo_project_path
。我注意到git似乎不遵循svn复制操作,因此生成的历史记录比我预期的要简短得多。假设我的SVN存储库如下所示:
root
- a
- b
- c
- parent-proj
- b
- c
parent-proj
下,作为重组工作的一部分,旨在最终从其旧位置根目录下删除它们。当我执行git svn clone http://svnhost/parent-proj
时,生成的git存储库缺少所有在移动之前源自/b
和/c
的历史记录。这是git-svn的限制还是有办法使这些历史记录显示在我的存储库中?从我的有限调查来看,使用
filter-branch
命令,如在Getting complete history of an SVN repo that's been renamed using git-svn中描述的,可能有效,尽管在我的情况下有多个父级,这可能会使事情变得复杂。首先克隆整个存储库,然后从中拆分新存储库(使用filter-branch?)是否是更好的方法?
git svn clone
命令还可以跟踪克隆目录之外的项目(它们的原始位置)。 - Shadow Mangit svn clone
克隆)中某个函数的历史记录,于是我在 StackOverflow 上搜索并找到了 https://dev59.com/Qm445IYBdhLWcg3wWI-L,它向我展示了git blame -C MyFile
命令,这个命令给出了我想要的函数的责任历史记录,一直追溯到原始文件(位于不同目录中)被复制到这个文件中(原始文件今天仍然存在于新目录中,但这些行已经不在其中)。 - Shadow ManmainProj/trunk/module[AB]
拆分为moduleA/trunk
和moduleB/trunk
),那么在拆分之前的历史记录将无法获取。但是如果整个项目被复制(mainProj/trunk
复制到newMainProj/trunk
),那么你应该能够获取完整的历史记录。 - Shadow Mansvn log
和svn log --stop-on-copy
命令并比较结果。 - Patryk Obara