备份使用git的项目

9

我正在将我的文件刻录在DVD上,做一个快速重装之前。作为最近开始使用git的用户,我从未尝试过这样做。所以我想和你们确认一下。如果我理解正确的话,我只需要备份包含.git文件夹的项目目录project_name,并注意备份其中的隐藏文件。当我将其复制到“新”机器上并重新安装git后,我可以像什么都没有发生一样继续工作?是这样吗?


捆绑包的主要优点在于它能够仅捆绑主存储库的部分历史记录,使您能够进行增量保存并逐步应用于目标。此外,只需复制一个文件。 - VonC
2个回答

12
如果您只想备份项目文件(不包括历史记录),您可以使用 git archive (这样,我就不必“观察隐藏文件”)。
脚本 git-archive-all.sh 实际上会归档当前路径中的所有 git 存储库和子模块。

有助于创建一个包含其他子模块的 git 超级项目的单个 tar 文件。


正如查尔斯·贝利在评论中所提到的,git bundle更为适合以保留历史记录(git bundle2007年2月推出)。

参见使用git bundle备份git存储库

git bundle旨在允许在存储库之间没有直接连接(即离线)时传输git提交,但由于提交数量众多和多个分支,使用补丁不是一个选项。
git bundle只是一个文件,可以非常轻松地创建并导入,因为它可以像另一个远程仓库一样处理。以下是一个快速示例:

jojo@dualtron:~/devel$ git bundle create ~/devel.bdl master test 

一个捆绑包保存在 ~/devel.bdl 下,其中包含我的主分支和测试分支。
如果我现在在 B 仓库,只需使用 jojo@dualtron:~$ git ls-remote devel.bdl,它会显示存储在捆绑包中的分支。
要使用捆绑包,只需像使用远程仓库一样,使用 git fetch(例如)。

jojo@dualtron:~/git/repoB$ git fetch ~/devel.bdl refs/heads/\*:refs/remotes/bundle/\*

1
对于备份,我认为git bundlegit archive更合适。git archive只创建树(快照)的tarballs,但不保留提交和历史记录。git bundle可以创建一个冻干的存储库,没有任何依赖关系,可以是您喜欢的任意分支。 - CB Bailey
1
@Charles:感谢您的评论。我已经相应地编辑了我的答案。 - VonC
1
在使用“git bundle ...”与选择全部/复制/粘贴整个内容之间,有什么优势吗?对于这种特定情况(只是刻录到DVD或暂时放置在USB上)? - Rook
@ldigas 理论上,你的刻录程序可能会损坏git的文件名,除非你将repo放入一个存档文件中。但是,如果你已经归档了,使用bundle的优点是可以直接用作远程(当然只读,如果在CD上)。 - Tobias Kienzler

9
没问题。

4
史上最简短、最令人安心的回答 :) - Rook
4
我试着只说“是”,但它不允许我发布少于15个字符的答案 :P 一个 Git 存储库就是一个带有 .git 目录的文件夹(以及它的子文件夹),使用 git init 进行初始化。你可以将这个文件夹移动到任何地方,并且它将能够与 Git 一起正常工作。 - Charles Ma
我也是Git的新手,因此遇到了这个问题。尽管根据其他答案,git bundle似乎是更好的选择,但如果手动备份文件,那么只需要备份.git文件夹即可,对吗?仅凭该文件夹的内容,可以正确地重建任何分支的当前状态吗? - Drew Noakes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接