为什么 git 告诉我我的子模块的路径被忽略了?
The following path is ignored by one of your .gitignore files:
multi/vim/.vim/bundle/powerline
Use -f if you really want to add it.
这就是我正在做的事情:
$ git subaddvim git://github.com/Lokaltog/vim-powerline.git powerline
The following path is ignored by one of your .gitignore files:
multi/vim/.vim/bundle/powerline
Use -f if you really want to add it.
$ git help subaddvim
`git subaddvim' is aliased to `!f(){ [ $# -eq 2 ] && git submodule add $1 multi/vim/.vim/bundle/$2; };f'
编辑:看起来它是p
in p
owerline:
$ git subaddvim git://github.com/Lokaltog/vim-powerline.git p
The following path is ignored by one of your .gitignore files:
multi/vim/.vim/bundle/p
Use -f if you really want to add it.
$ git subaddvim git://github.com/Lokaltog/vim-powerline.git owerline
Cloning into 'multi/vim/.vim/bundle/owerline'...
我不明白为什么。
编辑 2:我在子模块克隆目标中找到了一个文件:
multi/vim/.vim/bundle$ cat powerline/.git
gitdir: ../.git/modules/multi/vim/.vim/bundle/powerline
如果我删除它并重试,我会得到一个不同的错误:
$ git subaddvim git://github.com/Lokaltog/vim-powerline.git powerline
fatal: Not a git repository: ../.git/modules/multi/vim/.vim/bundle/powerline
Unable to checkout submodule 'multi/vim/.vim/bundle/powerline'
也许我的 .git 出了点问题?(我昨天克隆了这个 repo,然后恢复了这个更改。)
编辑3:我尝试git submodule
直接使用(而不是我的别名)并且它有效!我可以通过git reset --hard
在克隆之后重新创建问题(有时)。似乎这是我的别名的组合,它与 git 命令 git 忽略.git
文件(或做一些我不理解的魔术)的工作方式不同。也许与我的 .git/config 引用了电力线有关。
编辑4:我以前的编辑不清楚:虽然git submodule
直接使用。它并不总是有效。我不知道为什么它首先起作用。
我已将其缩小到可重现的情况。看起来问题是由 git 假设子模块位于根目录中引起的。这是我的测试脚本。
if [ ! -d remote ] ; then
echo
echo Setup remote test repo
mkdir remote
cd remote
git init
touch firstfile
git add firstfile
git ci -m'first'
cd -
fi
# Pick one of these lines:
submodule=multi/plugin
# OR
submodule=plugin
echo
echo Setup test repo
mkdir test
cd test
git init
touch firstfile
git add firstfile
git ci -m'first'
echo
echo submodule add
git submodule add ../remote $submodule
ls -ld $submodule/.git
cat $submodule/.git
echo
echo submodule remove
git reset --hard HEAD
ls -ld $submodule/.git
cat $submodule/.git
rm -r $submodule/
echo
echo submodule re-add
git submodule add ../remote $submodule
ls -ld $submodule/.git
cat $submodule/.git
使用submodule=multi/plugin
将失败:
submodule re-add
fatal: Not a git repository: ../.git/modules/multi/plugin
Unable to checkout submodule 'multi/plugin'
-rw-r--r-- 1 pydave mkgroup 37 Aug 1 10:08 multi/plugin/.git
gitdir: ../.git/modules/multi/plugin
(在此之后,如果您运行git submodule add
,您将收到“以下路径被忽略”消息。)
但submodule=plugin
会成功:
submodule re-add
-rw-r--r-- 1 pydave mkgroup 31 Aug 1 10:07 plugin/.git
gitdir: ../.git/modules/plugin
相对路径都是 using ../.git
,这仅适用于第二个选项 - 当子模块位于 git 项目的根目录中时。
我已重命名此问题以更具体地解决我的问题,并重新询问了原始问题。