【问题标题】:Move .git into a different directory than the source it manages将 .git 移动到与其管理的源不同的目录中
【发布时间】:2016-08-05 13:26:34
【问题描述】:

我不是在问如何移动 git 存储库。我想将 .git 中包含的元数据移动到一台机器上的其他地方,而不影响世界其他地方。

目标是拥有

~/gitmetadata/myproject/.git
~/gitmetadata/myproject/.gitignore
~/somecode/myproject/ # No .git here anymore

本练习的目的是将 .git 放在持久存储 (ssd) 上,而保存源代码/目标代码等的工作目录位于 ram 磁盘上。我也不想将 .git 放在 ramdisk 上,因为我宁愿不必通过克隆远程 repo 来开始每次重新启动。

理想情况下,我正在寻找一个配置选项,我可以将其写入每台机器的配置文件中,上面写着“实际上,文件就在那里”。

如果我学习如何配置 git repo 以进行透明转发,或者通过修改文件系统 unionfs 样式(这会很慢),我可以通过从本地 repo 中提取来解决此问题。

git 可以将 .git 元数据放在其他地方吗?

编辑:其中一个答案包括短语“git config core.worktree”。在谷歌中输入这个发现我的搜索没有重复,20132009

【问题讨论】:

    标签: git


    【解决方案1】:

    将您的 .git 目录移动到您希望的位置 - 比如说 /tmp/back-up-dir 将 .git 目录替换为包含 gitdir 路径的 .git 文件。

    例如:

    $ cd myProject
    $ mv .git /tmp/back-up-dir/.git
    $ echo "gitdir: /tmp/back-up-dir/.git" > .git
    $ git config core.worktree $PWD
    

    【讨论】:

    • 这行得通,并且在第 4 行之前看起来很棒。 git config core.worktree 有什么作用?
    • 没关系,明白了。文本文件告诉 git 在哪里可以找到元数据,core.worktree 告诉元数据它关心哪些文件。谢谢
    • 如果你不执行最后一个命令(git config core.worktree $PWD),git 命令仍然可以在工作树中毫无问题地执行(在这种情况下为myProject)。唯一不起作用的是:cd /tmp/back-up-dir/.git; git status; 将输出fatal: this operation must be run in a work tree。这可以通过明确指定工作树来解决:git --work-tree=/path/to/myProject status,或者只是将工作树添加到配置中(这是答案的最后一个命令所做的)。
    【解决方案2】:
    git init:
    
    --separate-git-dir=<git dir>
        Instead of initializing the repository as a directory to either $GIT_DIR
        or ./.git/, create a text file there containing the path to the actual
        repository. This file acts as filesystem-agnostic Git symbolic link to the
        repository.
    
        If this is reinitialization, the repository will be moved to the specified 
        path.
    

    【讨论】:

      【解决方案3】:

      是的,您可以将.git 文件夹移动到永久存储,然后将$GIT_DIR 环境变量设置为指向该位置。

      但是请注意,您不能将 .gitignore 文件放在那里。它们存在于工作目录中,并且它们包含相对于它们所在目录的路径。(这些通常会被签入,并且无论如何都是存储库的一部分。)如果你想要一个输出,你可以使用$GIT_DIR/info/exclude of-repository 机制来忽略文件。

      【讨论】:

      • 在签入时不用担心 .gitignore。如果我只有一个 git 存储库,看起来 $GIT_DIR 会很好地工作,公平地说,OP 确实建议这样做,但是在不同的 shell 中切换环境变量到让 git 指向正确的地方听起来很危险
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多