Backup

如何在單個文件中以正確的方式備份本地 git repo?

  • March 20, 2021

標題似乎有點奇怪,所以有點背景:

我有幾個本地 git repos,發現自己想做一個備份。想到了兩種方法,git bundle並且tar(知道還有很多其他方法,但我想要一些“簡單”的東西,這會使 repo 打包在一個“單個文件”中)

  • 使用焦油

我試過的命令是

tar cvf gitrepo.tar gitrepo/

現在,這乍一看是可行的,但是如果我將其提取到某個地方,則會出現一些奇怪的現象,例如:

git config(.git/config 中的那個)似乎與 tar 中的那個不同,而是一個“舊”版本。例如:如果我編輯配置並將其 tar,然後解壓縮,無論出於何種原因,配置都不會有最新的更改…

除此之外,其他一切似乎都有效,儘管我沒有檢查 .git 文件夾中的其他文件是否與配置文件有類似的奇怪之處。

  • 使用 git 包

我試過的兩個命令是:

git bundle create repo.bundle

git bundle create repo.bundle --all

第一個命令乍一看就起作用,但後來我注意到它沒有所有分支,因為我沒有使用--all標誌。

第二個命令乍一看(再次),但是,如果我 git clone 說捆綁,它最終不包含在非捆綁/原始本地儲存庫中送出的所有文件……

我認為“失去的文件”在 .git 中,所以我在那裡尋找最大的文件,並在 .git/objects/pack 中找到了一個……所以我使用以下命令將其解壓縮:

cd "$@"/.git/objects/pack ; mkdir ~/SAMPLE; mv *.pack ~/SAMPLE; git unpack-objects < ~/SAMPLE/*.pack; rm -rf ~/SAMPLE

$@是從 git 包中複製的本地 repo 的名稱。我沒有解決上述問題,但我確實注意到一些送出歷史已恢復,儘管原始儲存庫中仍然缺少文件。

所以我很困惑如何正確備份我的本地 git repo(最好在單個文件中),同時仍然保留文件的最新更改並且沒有失去文件?(如所有送出歷史、分支等)

如果我在提取 tar 之前移動它,似乎 tar 會按預期工作:

mv gitrepo.tar otherdir/
cd otherdir ; tar xvf gitrepo.tar

作為替代方案, zip 似乎可以在不先移動存檔的情況下正常工作:

zip -Zs -r -FS gitrepo.zip gitrepo/

上面沒有壓縮的壓縮。

引用自:https://unix.stackexchange.com/questions/640201