【问题标题】:git svn fetch repeatedly fails for no apparent reasongit svn fetch 无缘无故地反复失败
【发布时间】:2021-06-04 08:30:00
【问题描述】:

背景

我们计划在 Azure DevOps 中将 SVN 单向迁移到 Git,以便我们可以保留消息的提交历史记录。正如您所料,我们进行了一次试运行,在经过 26 小时处理后,我们想出了最终工作的命令列表。

这些命令是:

在 Git Bash 中运行以获取来自 SVN 的 Git 格式的所有作者列表:

svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors-transform.txt

以管理员身份在 Windows cmd shell 中运行,注意复制完成是因为经过多次尝试,这些是使用 git ignore 命令和 git lfs track 命令创建的,因此保存以供重复使用。 git 配置文件也是如此,我告诉它要处理的显式 SVN 标签:

git svn init --prefix "" --no-metadata --trunk=Trunk --branches=Branches --tags=Tags https://jeeves/svn/ResourceDirectoryPortal/
git lfs install
copy ..\.gitattributes
copy ..\.gitignore
copy ..\authors-transform.txt
copy ..\config .\.git
git add .gitattributes
git add .gitignore
git commit -m "Preparation"
git svn fetch --log-window-size=2500 -A authors-transform.txt

在 Git Bash 中运行以创建 Git 标签:

for t in $(git for-each-ref --format='%(refname:short)' refs/remotes/tags); do git tag ${t/tags\//} $t && git branch -D -r $t; done

通过批处理文件在 Windows cmd 中运行以下一系列命令来删除错误创建的标签,因为这样做比尝试修复它并等待另外 26 小时的迁移时间更容易:

git tag -d NameOfTagHere

然后我们从 /.git/config 中删除“SVN”部分并删除 /.git/svn 文件夹。之后我们以管理员身份从 Windows cmd shell 运行:

git remote add origin https://AzureDevops.url.here/for-empty-git-repo
git config http.version HTTP/1.1
git push origin --all
git push origin --tags

问题

因为我们在存储库中有一些 SQL Server 压缩的 .BAK 文件,用于在构建测试、自动化集成测试等过程中进行恢复……Azure Git 存储库大约需要 11 分钟才能克隆。希望使用 Git LFS 可以使这些文件的影响更可接受,但决定进行另一次测试:

  • **/*.bak 已添加到 .gitignore 文件中
  • *.bak LFS 跟踪行已从 .gitattributes 文件中删除
  • 运行与上述相同的一组命令,但在随机时间后,但通常在 1 到 2 小时范围内,我得到以下 3 个错误之一,这些错误出现在最后一行显示的不同 SVN 修订/文件在它们出现在输出中之前:
ls-tree, command error 127
error closing pipe: Broken pipe at C:/Program Files/Git/mingw64/share/perl5/Git/IndexInfo.pm line 32. at /usr/lib/perl5/vendor_perl/SVN/Ra.pm line 623
rev-parse --git-path svn: command returned error: 127
config svn-remote.svn.tags-maxRev 2062: command returned error: 127

理论检验

  • 我想到的可能是我使用的 AzureDevops 解决方法 用于 Git LFS 能够正确处理较大的文件,即 是以下命令:git config http.version HTTP/1.1

    我在没有运行该命令的情况下再次尝试,但仍然得到了一个 以上2个错误。

  • 随后的尝试我只是从上面运行 git svn fetch 命令,以防它只是一些暂时性问题 - 不,不是!

  • 我清空文件夹并重新开始的最新尝试,跳过了 Azure devops 行,它还没有再次失败,但只有大约一个小时。

难倒

在使用 Git 方面,我相当菜鸟。我知道它是分布式的,这与 SVN 根本不同。我只是不明白相同的命令如何随机爆炸而没有更详细的错误。 SVN repo 的唯一区别是提交了 50-100 个以上

更新:2021 年 8 月 3 日 尝试通过 Git Bash 运行整个事情,而不是仅仅通过一些,现在开始报告第三个错误。我在这里抓着稻草。我什至尝试将 log-window-size 参数从 2500 降低到 1000 再降低到 500。仍然没有乐趣。

更新:2021 年 9 月 3 日 我们的一位系统管理员查看了 SVN 日志,似乎它被来自 2 台不同机器的同一个通用用户锤击。我联系了负责这些机器的相关人员,并让其中一台机器停止了它正在做的事情,所以理论上减少了 50% 到 SVN 服务器的持续流量再次尝试并得到了我添加到的错误 4上面的错误列表。所以看起来这不是超时问题。

【问题讨论】:

    标签: git svn git-svn


    【解决方案1】:

    我不 100% 知道以下是否属实,但 git svn fetch 现在正在完成且没有错误或只是中途停止。

    我检查了来自服务器的 SVN 日志,在发生错误时,到一天结束时,SVN 日志的大小为 0.5GB,其中大部分不是我的 Git 迁移.我怀疑发生了某种形式的超时,而 git 令人沮丧地只是有一个无用或没有错误消息。当git svn fetch 命令起作用时,SVN 日志在一天结束时已降至 70MB

    因此,这个故事的寓意似乎是检查您的 SVN 日志,因为 git 不会告诉您任何有用的信息。

    【讨论】:

      猜你喜欢
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      相关资源
      最近更新 更多