2011-05-26 51 views
6

正如您可能已经知道,默认情况下,git不会为新的裸存储库启用reflog更新。问题是,我有一个很长的历史记录库,但它是在我设置标志“logAllRefUpdates”之前创建的,现在我想让这个信息用于其他应用程序的工作。如何在现有的裸存储库中创建reflog信息

如何通过对现有存储库进行最小更改来实现这一目标。一个非常简单的解决方案是推新的提交,我不想(!):-)

回答

2

reflog是一个相对简单的文件格式。这里有一个例子:

] cat .git/logs/HEAD|sed 's/\t/<TAB>/' 
0000000000000000000000000000000000000000 5cfe4256d98af22a570c78c5e3048391a90f5f98 Joe User <[email protected]> 1306427954 -0400<TAB>clone: from git://git.kernel.org/pub/scm/git/git.git 

您可以手动按照相同的格式建立适当reflogs:

previous-ref-or-zero new-ref User Name <[email protected]> unix-timestamp timezone\tmessage 

只需创建其中之一为每个参考。您可以直接使用git for-each-ref与适当的格式字符串(谢谢,克里斯!)

+0

不幸的是,我刚刚尝试过,这是行不通的。您可以尝试先将core.logallrefupdates设置为默认(禁用),然后创建裸回购,并再次启用logallrefupdate,并且... – instcode 2011-05-26 17:12:25

+0

用新方法更新 – bdonlan 2011-05-26 17:32:08

+1

迭代refs的程序应该使用'git for-each-ref '而不是“处理宽松和紧凑的裁判”。 – 2011-05-27 03:13:59

相关问题