Git 如何在现有的裸存储库中创建重登录信息

Git 如何在现有的裸存储库中创建重登录信息,git,git-bare,reflog,Git,Git Bare,Reflog,您可能已经知道,默认情况下,git不会为新的裸存储库启用reflog更新。问题是,我有一个很长的历史存储库,但它是在我设置“logAllRefUpdates”标志之前创建的,现在我希望其他应用程序能够使用这些信息 如何在对现有存储库进行最小更改的情况下实现这一点。一个非常简单的解决方案是推送一个新的提交,我不想(!):-)reflog是一种相对简单的文件格式。下面是一个例子: ] cat .git/logs/HEAD|sed 's/\t/<TAB>/' 000000000000000

您可能已经知道,默认情况下,git不会为新的裸存储库启用reflog更新。问题是,我有一个很长的历史存储库,但它是在我设置“logAllRefUpdates”标志之前创建的,现在我希望其他应用程序能够使用这些信息


如何在对现有存储库进行最小更改的情况下实现这一点。一个非常简单的解决方案是推送一个新的提交,我不想(!):-)

reflog是一种相对简单的文件格式。下面是一个例子:

] cat .git/logs/HEAD|sed 's/\t/<TAB>/'
0000000000000000000000000000000000000000 5cfe4256d98af22a570c78c5e3048391a90f5f98 Joe User <foo@example.com> 1306427954 -0400<TAB>clone: from git://git.kernel.org/pub/scm/git/git.git
]cat.git/logs/HEAD | sed's/\t/'
0000000000000000000000000000000000000000 5CF4256D98AF22A570C78C5E3048391A90F5F98 Joe用户1306427954-0400clone:来自git://git.kernel.org/pub/scm/git/git.git
您可以按照相同的格式手动构建适当的回流:

previous-ref-or-zero new-ref User Name <user@email> unix-timestamp timezone\tmessage
previous ref或zero new ref用户名unix timestamp timezone\t消息

只需为每个ref创建其中一个。您可能可以直接使用带有适当格式字符串的git for each ref(谢谢,Chris!)

来实现这一点。不幸的是,我刚刚尝试过,但没有成功。您可以先将core.logallrefupdates设置为默认值(禁用),然后创建一个裸repo,然后再次启用logallrefupdate,并且……迭代ref的程序应该为每个ref使用
git,而不是“处理松散和压缩的ref”。在我的例子中,git pack refs不返回任何内容。但是,我发现一种更简单的方法是克隆该repo,然后将.git/logs复制到裸repo。解决这个问题的关键是知道我不知道的reflogs存储在哪里:)。谢谢