使用git svn时,可以通过
的内容实现对中央存储库的稀疏检查。git clone -s URL-to-root --include-paths 'dir1|dir2|dir3'
使用此设置一段时间后,我想将另一个目录dir4添加到跟踪的目录。这个目录已存在于我已经签出的许多提交中。通过运行
编辑变量svn-remote.svn.include-pathsgit config --edit
对git fetch
没有预期的效果(只有在将来提交时更改的文件会在更改时检出;不会立即检出),以下内容也不会检出dir4:
git svn fetch --include-paths dir4
我认为以下内容可行,但由于第一次出现dir4的第一次修订(请将其称为REV),因此需要重新编写所有修订版本:
git svn reset -r REV
git svn fetch --include-paths dir4
git svn rebase
跟踪dir4的更好方法是什么?如果我不关心dir4的历史怎么办?
如果我怀疑我以后想要更改跟踪目录列表,是否有更好的方法可以使用git-svn进行初始稀疏检出?我还试过列出在原始提交中不能获取的directoreis,但我不知道如何在以后取消它们:
git svn fetch --ignore-paths dir4
但是当我决定要查看时,如何告诉git停止忽略dir4
?
答案 0 :(得分:1)
git-svn手册页https://git-scm.com/docs/git-svn/1.9.1#git-svn-emresetem的reset
部分指出:
...如果更改--ignore-paths选项,则获取可能会失败,并显示“在提交中找不到”(以前不可见的文件)或“校验和不匹配”(缺少修改)。如果无法永久忽略问题文件(使用--ignore-paths),则修复存储库的唯一方法是使用reset。
我认为原因是这样的:Git为svn历史记录中的每个svn提交创建一个单独的git commit(由其校验和标识)。通过在历史记录中添加目录,校验和必定必须更改,因此除了重建整个历史记录外别无其他方法。
即使不重新创建历史记录,也无法添加目录。添加该提交的提交必须在本地创建,并且尝试svn dcommit
时,会发生错误Item already exists in filesystem...