如何使用带有git管理的dotfiles的子模块?

时间:2012-12-13 16:23:36

标签: git git-submodules dotfiles

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

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

所以,我可以用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子模块不接受环境变量(虽然其他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

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

1 个答案:

答案 0 :(得分:1)

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

设置GIT_DIR的目的是什么?