有办法将Reflog推送到远程吗?这似乎是一个非常有用的事情,但我不知道如何做到。 我想象了一些像git push --include-reflogs
这样的东西
最终,我希望远程有一个Reflog的逐字副本在推送时刻
我尝试使用--mirror
,但是1)我不想从特定远程删除任何分支,只能手动删除,2)它仍然没有将Reflog复制到远程
是否有人知道如何做到这一点?
有办法将Reflog推送到远程吗?这似乎是一个非常有用的事情,但我不知道如何做到。 我想象了一些像git push --include-reflogs
这样的东西
最终,我希望远程有一个Reflog的逐字副本在推送时刻
我尝试使用--mirror
,但是1)我不想从特定远程删除任何分支,只能手动删除,2)它仍然没有将Reflog复制到远程
是否有人知道如何做到这一点?
您真正询问的是,是否有一种方法可以备份匿名(即未引用)的提交对象及其树和基本对象。答案是否定的。匿名对象——仅由您的引用日志引用的对象——是本地存储库中私有的。
但是——您只需复制任何存储库的.git
目录即可实现您想要的功能。如果源存储库正在忙碌(例如正在进行提交,垃圾回收或重新打包),那么您需要按照特定的顺序复制.git
目录中的文件和目录。这在各个地方都有解释,但其中一个例子是http://article.gmane.org/gmane.comp.version-control.git/147354(“如果您希望您的rsync备份正常,请遵循一些排序规则...”)
您可以备份.git/logs
,这将备份提交的引用(但不包括提交或文件本身)。
实际上,git将reflog
信息存储在.git/log
目录下,您可以像打开此目录中的文本编辑器中的文件一样对它们进行任何操作。如果您删除此目录,则所有reflog
都会消失,如果您恢复它,则reflog
将回来。
据我所知,没有内置的方法来跟踪.git/logs
。我尝试将.git/log
移动到工作目录,并从.git
目录创建符号链接。它可以工作,但效果不是很好,因为每次提交时,HEAD
会移动并且.git/logs/HEAD
会更改,然后您现在有一个未提交的更改。工作目录永远不会干净。
.git/logs
目录只包含对提交的引用,而非提交或文件本身。 仅备份此目录与备份桌面快捷方式一样没有意义。 Reflog 保留最近过去作为 HEAD 的提交的引用(因此名称),以便它们不会变得未引用(悬空),然后被垃圾回收。 即使您没有 reflog,如果提交尚未被 GC,则可以通过 git fsck
恢复丢失的提交。 您可以在 Pro Git 中找到详细信息:http://git-scm.com/book/en/v2/Git-Internals-Maintenance-and-Data-Recovery - user.git
可能更好。 - dyngGit 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
)。
git reflog
显示分支尖端的更改。由于 Git 是一种分布式版本控制系统,这些更改在不同的存储库中会有所不同。我不确定您如何推送它们。它们会覆盖远程 reflogs 吗? - Klas Mellbourn