从 SVN 历史记录中列出作者,包括已删除(未合并)的分支
Listing authors from SVN history including deleted (not merged) branches
我正在将 open source project 形式的 Subversion 迁移到 git,我在创建作者文件时遇到了一些问题:
有一次,有人删除了 SVN 中的一个分支。他没有合并回去,只是删除了它。结果,当我 运行 svn log -g --quiet -r 1:HEAD
时,结果不包括对已删除分支所做的任何提交。这意味着我的最终 SVN 用户列表中缺少任何只致力于此、删除、分支的人。
到目前为止,我一直无法找到包含所有此类用户的 SVN 语法。它们是必要的,因为 git 迁移过程是无情的。它将跟踪这个已删除的分支,因此需要用户。
有什么建议吗?
编辑: 我硬着头皮手动将所有用户添加到我的作者文件中。为了做到这一点,我找到了删除分支的提交并获取了到那时为止的日志:这让我得到了所有丢失的提交。
Edit2: 我正在处理的存储库在这里:https://svn.atozed.com:444/svn/Indy10 可以使用用户名 [=26= 以只读模式访问]Indy-Public-RO。有问题的树删除发生在修订版 4493 和 4494 中。
您可以通过尝试拉取日志 1216-1219(例如 svn log -g --quiet -r 1200:1220
)
来验证问题
尝试 运行 使用存储库的 绝对基础 URL(即存储库的 top-most 文件夹)的日志命令,例如:
svn log http://your-server.com/svn/your-repo -g --quiet -r 1:HEAD
我刚刚用我的旧存储库尝试过,日志没有遗漏任何一个修订。
编辑 1: 我看到您已经解决了您的问题,但我想扩展上述方法 - 我坚信这应该有效。考虑使用以下脚本来创建一个 repo 并做一些工作:
#!/bin/bash
mkdir -p ~/tmp/svntest
cd ~/tmp/svntest
svnadmin create ~/tmp/svntest/repo
svn co file:///home/oink/tmp/svntest/repo wc
svn mkdir wc/trunk wc/branches wc/tags
svn ci wc -m "created repo structure" --username user1
echo change1 > wc/trunk/test.txt
svn add wc/trunk/test.txt
svn ci wc -m "committed change1 to trunk" --username user2
svn cp wc/trunk wc/branches/branch1
svn ci wc -m "created branch1" --username user3
echo change2 > wc/branches/branch1/test.txt
svn ci wc -m "committed change2 to branch1" --username user4
svn up wc
svn del wc/branches/branch1
svn ci wc -m "removed branch1" --username user5
svn log wc -g --quiet -r 1:HEAD
最后一个命令的输出包括对已删除的未合并分支的提交:
------------------------------------------------------------------------
r1 | user1 | 2018-03-02 10:57:48 +0100 (Fri, 02 Mar 2018)
------------------------------------------------------------------------
r2 | user2 | 2018-03-02 10:57:49 +0100 (Fri, 02 Mar 2018)
------------------------------------------------------------------------
r3 | user3 | 2018-03-02 10:57:49 +0100 (Fri, 02 Mar 2018)
------------------------------------------------------------------------
r4 | user4 | 2018-03-02 10:57:49 +0100 (Fri, 02 Mar 2018)
------------------------------------------------------------------------
r5 | user5 | 2018-03-02 10:57:50 +0100 (Fri, 02 Mar 2018)
------------------------------------------------------------------------
编辑 2: 感谢发布存储库 URL!让我们在这里使用绝对数字。在撰写本文时,该存储库有 5448 次修订。当我做...
svn log https://svn.atozed.com:444/svn/Indy10 -g --quiet --username Indy-Public-RO > tmp.txt
grep -E "^r" tmp.txt | wc -l
...我得到的输出是:
5448
这意味着我们正在查看所有修订版,对吧?我们只需要收集用户名...
grep -E "^r" tmp.txt | cut -d"|" -f2 | sort | uniq
...获取完整的提交者列表:
Andreas Hausladen
Andrew Neillans
ArvidWinkelsdorf
(...cut for brevity...)
我正在将 open source project 形式的 Subversion 迁移到 git,我在创建作者文件时遇到了一些问题:
有一次,有人删除了 SVN 中的一个分支。他没有合并回去,只是删除了它。结果,当我 运行 svn log -g --quiet -r 1:HEAD
时,结果不包括对已删除分支所做的任何提交。这意味着我的最终 SVN 用户列表中缺少任何只致力于此、删除、分支的人。
到目前为止,我一直无法找到包含所有此类用户的 SVN 语法。它们是必要的,因为 git 迁移过程是无情的。它将跟踪这个已删除的分支,因此需要用户。
有什么建议吗?
编辑: 我硬着头皮手动将所有用户添加到我的作者文件中。为了做到这一点,我找到了删除分支的提交并获取了到那时为止的日志:这让我得到了所有丢失的提交。
Edit2: 我正在处理的存储库在这里:https://svn.atozed.com:444/svn/Indy10 可以使用用户名 [=26= 以只读模式访问]Indy-Public-RO。有问题的树删除发生在修订版 4493 和 4494 中。
您可以通过尝试拉取日志 1216-1219(例如 svn log -g --quiet -r 1200:1220
)
尝试 运行 使用存储库的 绝对基础 URL(即存储库的 top-most 文件夹)的日志命令,例如:
svn log http://your-server.com/svn/your-repo -g --quiet -r 1:HEAD
我刚刚用我的旧存储库尝试过,日志没有遗漏任何一个修订。
编辑 1: 我看到您已经解决了您的问题,但我想扩展上述方法 - 我坚信这应该有效。考虑使用以下脚本来创建一个 repo 并做一些工作:
#!/bin/bash
mkdir -p ~/tmp/svntest
cd ~/tmp/svntest
svnadmin create ~/tmp/svntest/repo
svn co file:///home/oink/tmp/svntest/repo wc
svn mkdir wc/trunk wc/branches wc/tags
svn ci wc -m "created repo structure" --username user1
echo change1 > wc/trunk/test.txt
svn add wc/trunk/test.txt
svn ci wc -m "committed change1 to trunk" --username user2
svn cp wc/trunk wc/branches/branch1
svn ci wc -m "created branch1" --username user3
echo change2 > wc/branches/branch1/test.txt
svn ci wc -m "committed change2 to branch1" --username user4
svn up wc
svn del wc/branches/branch1
svn ci wc -m "removed branch1" --username user5
svn log wc -g --quiet -r 1:HEAD
最后一个命令的输出包括对已删除的未合并分支的提交:
------------------------------------------------------------------------
r1 | user1 | 2018-03-02 10:57:48 +0100 (Fri, 02 Mar 2018)
------------------------------------------------------------------------
r2 | user2 | 2018-03-02 10:57:49 +0100 (Fri, 02 Mar 2018)
------------------------------------------------------------------------
r3 | user3 | 2018-03-02 10:57:49 +0100 (Fri, 02 Mar 2018)
------------------------------------------------------------------------
r4 | user4 | 2018-03-02 10:57:49 +0100 (Fri, 02 Mar 2018)
------------------------------------------------------------------------
r5 | user5 | 2018-03-02 10:57:50 +0100 (Fri, 02 Mar 2018)
------------------------------------------------------------------------
编辑 2: 感谢发布存储库 URL!让我们在这里使用绝对数字。在撰写本文时,该存储库有 5448 次修订。当我做...
svn log https://svn.atozed.com:444/svn/Indy10 -g --quiet --username Indy-Public-RO > tmp.txt
grep -E "^r" tmp.txt | wc -l
...我得到的输出是:
5448
这意味着我们正在查看所有修订版,对吧?我们只需要收集用户名...
grep -E "^r" tmp.txt | cut -d"|" -f2 | sort | uniq
...获取完整的提交者列表:
Andreas Hausladen
Andrew Neillans
ArvidWinkelsdorf
(...cut for brevity...)