【问题标题】:How can you use submodules with git-managed dotfiles?如何将子模块与 git 管理的点文件一起使用?
【发布时间】:2012-12-13 16:23:35
【问题描述】:

我使用 git 存储库来管理我的 dotfiles,我很难让子模块正常工作(我的大部分 .vim 都有很多外部插件)

我有一个别名 cgit 要做(不确定它是否相关) 别名 cgit='GIT_DIR=/home/myuser/.config-git GIT_WORK_TREE=/home/myuser/。混帐'"

所以,我可以使用 cgit pull 拉取存储库,但我无法让子模块签出/更新:

$ cgit submodule status
-9895285042a2fd5691b2f6582aa979e4d1bdffea .vim/bundle/ack
-e9267044261481fbb6717b482c2f3811eb61b409 .vim/bundle/command-t
<snip>
$ cgit submodule init
$ cgit submodule update
fatal: working tree '/home/myuser/.' already exists.
Clone of 'https://github.com/mileszs/ack.vim.git' into submodule path '.vim/bundle/ack' failed
$

我已尝试删除该特定目录并再次尝试,但它只是炸弹。我的 .gitmodules 没有 /home/myuser/。而且我的 .config-git/config 也没有对我的主目录的任何引用,所以我很茫然。如果有帮助,我的 git 版本是 1.7.4.1

谢谢!

更新

似乎第一件事是一个奇怪的错误,即 git submodule 不接受环境变量(尽管其他 git 命令是),但它需要传递命令行 arg。现在,克隆工作了,它只是抱怨(我手动修复了 ack 配置)

Cloning into '.vim/bundle/command-t'...
remote: Counting objects: 2659, done.
remote: Compressing objects: 100% (1089/1089), done.
remote: Total 2659 (delta 1453), reused 2524 (delta 1325)
Receiving objects: 100% (2659/2659), 447.42 KiB, done.
Resolving deltas: 100% (1453/1453), done.
fatal: Could not chdir to '../../../../../../../nfs_mounts/home/myuser/.vim/bundle/command-t': No such file or directory

如果我查看 ~/.config-git/modules/.vim/ack/config,我会看到:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    worktree = ../../../../../../../nfs_mounts/home/myuser/.vim/bundle/command-t
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = https://github.com/wincent/Command-T.git
[branch "master"]
    remote = origin
    merge = refs/heads/master

但如果我“ls”那个工作树,它似乎就在那里。如果我删除所有 ../ ,然后再次尝试 git 它似乎可以工作

【问题讨论】:

  • 您现在更改您的cgit 别名了吗?或者过程的任何其他部分?这不是git 中的错误,问题在于子模块命令正在 获得覆盖GIT_DIR 通过使用命令行选项,您停止了覆盖子模块的内容。

标签: git git-submodules dotfiles


【解决方案1】:

我认为这是因为您设置了GIT_DIR。看起来子模块克隆正在尝试将子模块的 .git 目录放在 ~/.git 中,但您的主 git 目录已经存在。

这样设置 GIT_DIR 的目的是什么?

【讨论】:

  • 因为我不希望常规 git 命令最终搜索/查找 dotfiles git 存储库。我想知道 git submodule 不接受 GIT_DIR 是否有原因...
  • 我认为是的,通常它会将.git 目录放在子模块克隆中。看起来您的子模块 GIT_DIR 与您的主目录 GIT_DIR 相同,因为两者都已被覆盖。试试[--git-dir=&lt;path&gt;] [--work-tree=&lt;path&gt;],我不认为你想覆盖我认为正在发生的子模块值。
  • 好像不行。这似乎是一个错误,如果它真的这样做了
  • GIT_DIR=/home/myuser/.config-git GIT_WORK_TREE=/home/myuser/。 git --git-dir=/home/myuser/.config-git --work-tree=/home/myuser 子模块更新 --init 致命:工作树 '/home/myuser' 已经存在。将“github.com/mileszs/ack.vim.git”克隆到子模块路径“.vim/bundle/ack”失败
  • 对不起应该更具体。删除 GIT_DIR= GIT_WORK_TREE= 并用命令行选项替换它们。
猜你喜欢
  • 2019-04-06
  • 2014-02-24
  • 2019-07-15
  • 2010-10-24
  • 2018-08-14
  • 2013-08-08
  • 1970-01-01
  • 2014-10-23
  • 2020-05-04
相关资源
最近更新 更多