从SVN历史列出作者,包括已删除(未合并)的分支

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从SVN历史列出作者,包括已删除(未合并)的分支相关的知识,希望对你有一定的参考价值。

我正在将open source project表单Subversion迁移到git,我在创建authors文件时遇到了一些问题:

有一次,有人删除了SVN中的分支。他没有将它合并回来,只是将其删除了。因此,当我运行svn log -g --quiet -r 1:HEAD时,结果不包括对已删除分支进行的任何提交。这意味着我的最终SVN用户列表缺少任何只提交此,删除,分支的人。

到目前为止,我一直无法找到包含所有此类用户的SVN语法。它们是必要的,因为git迁移过程是不可原谅的。它将跟踪此已删除的分支,因此需要用户。

有什么建议吗?

编辑:我咬了一下子弹并手动将所有用户添加到我的作者文件中。为了做到这一点,我发现了删除分支的提交,并抓住了一个日志到那一点:这让我失去了所有提交。

Edit2:我正在处理的repo是:https://svn.atozed.com:444/svn/Indy10,可以只读模式访问,用户名为Indy-Public-RO。有问题的树删除发生在修订版4493和4494中。您可以通过尝试提取日志1216-1219(例如svn log -g --quiet -r 1200:1220)来验证问题

答案

尝试使用存储库的绝对基本URL(即存储库的最顶层文件夹)运行log命令,例如:

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...)

以上是关于从SVN历史列出作者,包括已删除(未合并)的分支的主要内容,如果未能解决你的问题,请参考以下文章

如何在合并提交中列出已解决冲突的统计信息?

SVN Mirror 标记的分支历史保存

Subversion:如何获取所有活动的,未合并的分支的列表

[No000098]SVN学习笔记5-分支,合并,属性,补丁,锁,分支图

SVN查看修改过的文件

如何从svn服务器端彻底删除(包括历史版本中的内容)一个文件?