unitore git-svn中的目录(将目录添加到稀疏结账)

时间:2016-11-09 23:35:36

标签: git-svn sparse-checkout

使用git svn时,可以通过

的内容实现对中央存储库的稀疏检查。
git clone -s URL-to-root --include-paths 'dir1|dir2|dir3'

使用此设置一段时间后,我想将另一个目录dir4添加到跟踪的目录。这个目录已存在于我已经签出的许多提交中。通过运行

编辑变量svn-remote.svn.include-paths
git 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

1 个答案:

答案 0 :(得分:1)

git-svn手册页https://git-scm.com/docs/git-svn/1.9.1#git-svn-emresetemreset部分指出:

...如果更改--ignore-paths选项,则获取可能会失败,并显示“在提交中找不到”(以前不可见的文件)或“校验和不匹配”(缺少修改)。如果无法永久忽略问题文件(使用--ignore-paths),则修复存储库的唯一方法是使用reset。

我认为原因是这样的:Git为svn历史记录中的每个svn提交创建一个单独的git commit(由其校验和标识)。通过在历史记录中添加目录,校验和必定必须更改,因此除了重建整个历史记录外别无其他方法。

即使不重新创建历史记录,也无法添加目录。添加该提交的提交必须在本地创建,并且尝试svn dcommit时,会发生错误Item already exists in filesystem...