有没有办法在git中推送reflog?

时间:2013-05-30 17:34:49

标签: git git-push

有没有办法将reflog推送到远程?这似乎是一件非常有用的事情,但我不知道如何做到这一点。我想象的是git push --include-reflogs

最后,我希望遥控器在推送时有一份逐字记录的副本。

我尝试使用--mirror,但1)我不想删除此特定遥控器的任何分支,除非手动,2)它仍然没有将reflog复制到遥控器。

有谁知道是否/如何做到这一点?

3 个答案:

答案 0 :(得分:6)

你真正要问的是,有没有办法绕过匿名(即未引用的)提交对象及其树和blob用于备份目的。答案是否定的。匿名对象 - 仅由您的reflog引用的对象 - 对于本地存储库是私有的。

但是 - 你可以复制任何仓库的.git目录来做你想要的。如果源仓库繁忙(例如,提交正在进行,或者是垃圾收集或重新打包),那么您需要按特定顺序复制.git目录中的文件和目录。这在不同的地方解释,但一个例子是http://article.gmane.org/gmane.comp.version-control.git/147354('如果你希望你的rsync备份没问题,你需要关注一些 排序....')

答案 1 :(得分:2)

简而言之,您需要的只是备份.git/logs

实际上,git在reflog目录下存储.git/log信息,您可以对它们执行任何操作,例如使用文本编辑器在此目录中打开文件。如果您删除此目录,则所有reflog都会消失,如果您将其恢复,reflog将会恢复。

据我所知,没有内置的方法来跟踪.git/logs。我试图将.git/log移动到工作目录并从.git目录创建一个符号链接。它工作但不是很好,因为每次执行提交时,HEAD移动和.git/logs/HEAD更改,那么您现在有一个未经修改的更改。工作目录永远不会干净。

答案 2 :(得分:0)

Git reflog跟踪单个Git存储库的HEAD更改。每个克隆都有自己的reflog。 我无法弄清楚你会用共享的reflog做什么(远程帮助某人?)

如果您确实需要跟踪某人的reflog,您可以使用git reflog > dev1_reflog.txt将reflog内容转储到文件中并共享dev1_reflog.txt(使用git add dev1_reflog.txt; git commit -m "Adding dev1_reflog"; git push)。