2013-05-30 33 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