-1

サブモジュールのパスが無視されると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'

編集:それppowerlineにあるように見えます:

$ 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で混乱していることがありますか?(私は昨日このリポジトリのクローンを作成し、その変更を元に戻しました。)

編集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

相対パスは両方ともを使用して../.gitいます。これは、サブモジュールがgitプロジェクトのルートにある場合の2番目のオプションに対してのみ正しいものです。

この質問の名前を自分の問題に固有のものに変更し、元の質問を再質問しました。

4

2 に答える 2

1

答えは、トップレベルのディレクトリにないサブモジュールを使用するとgitにバグがあるということだと思います。

解決策は、に保存されているサブモジュールのgitリポジトリを削除することです.git/modules

$ rm -fr multi/plugin/ .git/modules/multi/plugin/
$ git submodule add ../remote multi/plugin
Cloning into 'multi/plugin'...
done.
于 2012-08-01T17:33:07.383 に答える
0

私はこの理由でgitエイリアスを避け、bashの履歴に依存して以前に入力した内容を記憶します。複雑なワンライナーCTRL-Rと他のbashコマンドラインの良さを思い出すことができます。自分がしていることを確認することで、エイリアスによって隠されていることを意識し続けることができます。別のマシンに移動すると、エイリアスに何が含まれていたかを正確に忘れてしまうため、問題が発生します。

于 2012-08-01T03:26:22.900 に答える