50

問題: -filesにもファイルもないときに./shells/smallApps/*Gitにファイルを追加する。./.git/./.git/info/exclude.gitignore

この質問は、問題が完全には解決されていないこのトレッドに基づいています。

走る

$git status                                                                                                                                          ~/bin
# On branch master
nothing to commit (working directory clean)
$git ls-files                                                                                                                                        ~/bin
Screen/dev/vim-open.screen
--- cut ---

Gitに「shells/smallApps/*」というファイルがないことに注意してください

$ls shells/smallApps/                                                                                                                                ~/bin
devTodo     extract     
                                                                                                                                             ~/bin

実行してGitに追加したい

$git add shells/smallApps/devTodo shells/smallApps/extract
fatal: Path 'shells/smallApps/devTodo' is in submodule 'shells/smallApps'
$git add .         

何らかの理由でファイルがGitに追加されないことに注意してください。

$git status                                                                                                                                          ~/bin 
# On branch master
nothing to commit (working directory clean)

.git / info/excludeにも.gitignore-filesにもファイルがありません。

最後の警告はどういう意味ですか?

4

3 に答える 3

102

アップデート

Gitがファイルを無視する一般的な理由は2つあります:gitignoresubmodules

具体的には、次の条件により、' git add'が呼び出されたときにGitがファイルを無視します。

  1. ファイルはパターンと一致します$GIT_DIR/exclude
  2. このファイルは、リポジトリ内のファイルのパターンと一致し.gitignoreます。
  3. このファイルは、ユーザー固有の.gitignoreファイル(' git config --global core.excludesfile'で指定)のパターンと一致します。
  4. このファイルはサブモジュールの一部です。

git add無視されたファイルに''を強制する:

''を呼び出すことにより、特定のファイルが無視されているかどうかを確認できますgit add full/path/to/file

マニュアルページには、「コマンドラインで無視されたファイルが明示的に指定されている場合、コマンドは無視されたファイルのリストとともに失敗します」と記載されています。

ファイルが無視される場合は、' git add --force full/path/to/file'を使用してファイルを強制的に追加できます。

サブモジュール参照を削除する手順:

前の回答で述べたように、shells/smallAppsはリポジトリ内 のサブモジュールです。

ファイルがサブモジュールの一部である場合、状況はより複雑になります。メインプロジェクト内からサブモジュールの内容を変更することはできません。

サブモジュール参照を削除し、メインリポジトリ内のファイルを直接追跡する場合は、実行する必要のあるいくつかの手順があります。サブモジュールから「.git」ディレクトリを単純に削除することはできません。メインリポジトリとサブモジュールの間には3つのリンクがあります。

  1. メインリポジトリ内の.gitmodulesファイル。
  2. .git/configメインリポジトリのエントリ。
  3. メインリポジトリ履歴のサブモジュールに関連するコミット。

この関連するSOの質問に従って、サブモジュールを完全に削除するには、次の手順を実行する必要があります。

注:別のブランチがこのサブモジュールに依存している場合、それを削除するとリポジトリが破損する可能性があります。これは危険な操作です...注意して使用してください。

  1. ファイルから関連する行を削除し.gitmodulesます。
  2. から関連するセクションを削除します.git/config
  3. 実行しますgit rm --cached path_to_submodule(末尾のスラッシュはありません)。
  4. 専念

サブモジュールの一部であったファイルは追跡されなくなり、必要に応じてそれらを保持または削除することができます(以下に1つの注意点があります)。

これらのファイルが必要ない場合は、単に削除することができます。

警告:これらのファイル(必要と思われる)を保持する場合は.git、サブモジュールフォルダーからディレクトリを手動で削除する必要があります。

  1. cd path_to_submodule
  2. rm .git
  3. cd ..
  4. git add path_to_submodule
  5. git status
  6. git commit

アップデート:

詳細情報のリクエスト:

この問題のデバッグを支援するために、次の完全なコマンドセッションの出力を投稿してください。

cd to the top-level directory in your repo
ls -al
cat .git/config
find . -name ".git*"
git status
git add editors
git add shells
git status

あなたがこれまでに行ったことの説明に基づいて、私は見ることを期待しています:

  • .gitmodulesどこにもファイルがありません
  • 1つのディレクトリのみ.git(リポジトリのルートにあります)
  • .gitにディレクトリがありませんeditors/vim/vimdoclet
  • .gitにディレクトリがありませんshells/smallApps
于 2009-07-08T14:58:23.700 に答える
2

この質問をGitメールリストに投稿することを検討する必要があります(git@vger.kernel.org)。より迅速で完全な応答が得られる可能性があります。

そこに投稿することにした場合は、必ず以下を含めてください。

  • あなたが達成しようとしていることの説明。
  • 発生した問題の説明。
  • 以下を示す完全なセッションログ:
    • リポジトリの最上位ディレクトリにcdします
    • ls -al
    • cat .git/config
    • find . -name ".git*"
    • git status
    • git add editors
    • git add shells
    • git status
于 2009-07-09T17:33:52.593 に答える
2

git addサブモジュールについて何か言っているようです。ネストされたGitリポジトリはありますか?これを行う:

$ find . -name .git

.gitいくつのディレクトリがリストされていますか?複数ある場合は、ネストされたリポジトリが複数あるため、この混乱の原因となる可能性があります。

于 2009-07-05T22:50:27.803 に答える