Bare bones Git存储库包含跟踪文件

时间:2017-01-31 02:48:20

标签: git version-control backup

我想备份一个Git版本化项目,包括工作目录更改和指向远程存储库的指针。

备份文件夹应包含工作目录文件和所需的.git文件,以便用户可以安全地导航到项目并运行git pull(或其他git命令)。如果需要再次下载远程目录并检查工作目录的“完整性”,则无关紧要。

我无法备份整个.git文件夹,因为它包含非常大的文件。

我尝试了这些命令:

  • git --aggressive
  • git reflog expire --expire=now --all
  • git repack -ad
  • git prune

但是他们仍然会在*.pack文件夹中留下大量(> 200 MB).git/objects/pack个文件。

  • 我尝试删除objects文件夹,但这会使存储库无效:fatal: Not a git repository (or any of the parent directories): .git
    • 我在删除git init文件夹后尝试了objects,但这会导致错误fatal: bad object HEAD,而我无法执行任何其他命令。
  • 我尝试删除.git中的所有文件和文件夹,但.git/config除外,它仍然不是有效的git存储库。
    • 删除这些文件夹后我尝试了git init,但是工作目录上的更改变得“未跟踪”,即使它们是远程存储库中的相同文件,所以我被迫运行{{1并再次下载存储库。

有没有办法用最少的包文件创建一个简单的Git存储库,同时保持工作目录的“跟踪”状态?

2 个答案:

答案 0 :(得分:0)

您可以创建:

  • 工作树的存档:

    zip -r myrepo.zip myrepo -x *.git*
    
  • .git个回购的{strong> bundle (作为explained here):

    cd myrepo
    git bundle create /tmp/repositoryname.bundle --all
    

这会给你两个文件(更容易复制你想要的任何位置),最小尺寸 但是如果你的repo很大,你可能想要创建一个增量包,只包含最后几次提交(提供你可能使用该包的目标位置已经是历史的其余部分)

答案 1 :(得分:0)

.git/objects中的包文件包含旧版本的历史记录。如果要使用工作目录更改来备份git repo,则应该保持包文件不可靠。还有一种方法可以将其推送到裸仓库,然后将其克隆到您想要的任何地方。详细步骤如下:

  1. 通过git init --bare创建一个用于备份的裸仓库。
  2. 将回购推送到裸仓库:
  3. git remote add backup <path for bare repo> git push backup --all

    在裸仓库路径中,在.git/config文件中添加远程仓库信息:

    [remote "origin"]
        url = <remote repo URL>
        fetch = +refs/heads/*:refs/remotes/origin/*
    
    1. git clone <path for bare repo>的任意位置克隆备份回购。在克隆仓库中,如果您希望更改直接推送到远程仓库,则可以在.git/config中更改网址或使用git remote set-url origin <remote URL>