2

使用 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 进行初始稀疏签出?我还尝试从列出原始提交中不获取的directeis开始,但我不知道以后如何取消它们:

git svn fetch --ignore-paths dir4

dir4但是,当我决定也要检查它时,如何告诉 git 停止忽略呢?

4

1 回答 1

1

resetgit-svn 手册页https://git-scm.com/docs/git-svn/1.9.1#git-svn-emresetem的部分说明了这一点:

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

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

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

于 2018-11-08T09:08:14.423 回答