2013-05-30 52 views
2

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

最后,我希望遥控器在推送时有一个逐字拷贝的reflog。

我试过使用--mirror,但1)我不想从这个特定的远程删除任何分支,除了手动,2)它仍然没有将reflog复制到远程。

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

+0

'git reflog'显示分支提示的变化。由于Git是DVCS,所以这些更改在不同的存储库中会有所不同。我不确定你如何设想这些推动。他们会覆盖远程reflogs吗? –

+0

目的是为了备份。如果我的硬盘坏了,我仍然有我的reflog,这样我就可以像最后一次推动一样精确地记录下它的状态。 –

+0

这就是HDD备份的目的! – NightOwl888

回答

0

Git reflog跟踪单个Git存储库的HEAD更改。每个克隆都有自己的reflog。 我想不出你会使用共享引用日志做什么(帮助别人远程?)

如果你真的需要跟踪某人的引用日志,你可以使用git reflog > dev1_reflog.txt倾倒在文件中引用日志内容和共享dev1_reflog.txt(使用git add dev1_reflog.txt; git commit -m "Adding dev1_reflog"; git push)。

5

你真正要问的是,是否有一种方法推动匿名(即未被引用)提交对象及其树和blob用于备份目的。答案是否定的。匿名对象 - 仅由您的引用日志引用的对象 - 对本地回购站是私有的。

但是 - 您可以将任何回购的.git目录复制到您想要的值。如果源repo在忙时(例如,提交正在发生,或垃圾回收或重新打包),则需要按照特定顺序复制.git目录中的文件和目录。这是在不同的地方解释,但一个例子是http://article.gmane.org/gmane.comp.version-control.git/147354(“如果你希望你的Rsync备份要被罚款,你需要遵循一些 订货....”)

1

总之,你需要的仅仅是备份.git/logs

其实,git在.git/log目录下存有reflog的信息,你可以对它们做任何事情,比如用文本编辑器打开这个目录下的文件。如果您删除此目录,则所有reflog消失,如果您恢复它,则reflog将返回。

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

+0

-1:'.git/logs'目录仅包含*引用*提交,而不包含提交或文件本身。仅备份此目录与备份桌面快捷方式具有同样的意义。 Reflog保留引用(因此名称)在最近的过去提交HEAD,所以它们不会变成未引用(悬挂),然后垃圾收集。即使你没有reflog,如果他们还没有GC,你有机会通过'git fsck'恢复丢失的提交。您可以在Pro Git中找到详细信息:http://git-scm.com/book/en/v2/Git-Internals-Maintenance-and-Data-Recovery – user

+0

@user备份快捷方式不是什么坏事,需要什么操作系统正在备份快捷方式但不提交(这已由git完成)。而reflog不是用来防止未提交的提交,因为你可以在当前HEAD或分支头的祖先树中找到它们,它只是一个* log *。 – dyng

+0

复制快捷方式时没有指向它们的对象是没有意义的。 Git只推送那些可以从分支到达的对象。您错过了reflog的全部要点:使对象在从可用分支中删除后可以在有限的时间内到达。而那些悬挂的对象不会去服务器,因为它们不属于任何分支。 – user