私の元の質問については、以下の実線を参照してください。
ローカルディレクトリに追跡されていないフォルダがあります。 git status
を実行すると、次の結果が得られます。
Changed but not updated:
modified: vendor/plugins/open_flash_chart_2 (modified content, untracked content)
git add vendor/plugins/open_flash_chart_2
と入力してからgit status
を再試行しても、未追跡と表示されます。どうしたの?
これが私の最新の30分間の簡単な要約です。
Githubリポジトリがvendor/plugins/open_flash_chart_2
プラグインを追跡していないことを発見しました。具体的には、コンテンツはなく、 緑の矢印 フォルダーアイコン。
git submodule init
を試しました
No submodule mapping found in .gitmodules for path 'vendor/plugins/open_flash_chart_2'
git submodule add git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
を試しました
vendor/plugins/open_flash_chart_2 already exists in the index
git status
modified: vendor/plugins/open_flash_chart_2 (untracked content)
リポジトリ/ローカルディレクトリにある.gitmodules
という名前のファイルを探しましたが、見つかりませんでした。
私は何をしなければなりませんか サブモジュールを機能させる gitは適切に追跡を開始できますか?
これは無関係かもしれませんが(役立つ場合は含めます)、通常のgit commit -a
ではなくgit commit -m "my comments"
と入力するたびにエラーがスローされます。
E325: ATTENTION
Found a swap file by the name ".git\.COMMIT-EDITMSG.swp"
dated: Thu Nov 11 19:45:05 2010
file name: c:/san/project/.git/COMMIT_EDITMSG
modified: YES
user name: San Host name: San-PC
process ID: 4268
While opening file ".git\COMMIT_EDITMSG"
dated: Thu Nov 11 20:56:09 2010
NEWER than swap file!
Swap file ".git\.COMMIT_EDITMSG.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
Swap file ".git\.COMMIT_EDITMSG.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
私はGithubの完全な初心者であり、ドキュメントを調べようとしても、これらの特定の問題に少し困惑しています。ありがとうございました。
vendor/plugins/open_flash_chart_2
を「gitlink」エントリとして追加しましたが、サブモジュールとして定義したことはありません。 git submoduleが使用する(gitlinkエントリ)内部機能を効果的に使用していますが、サブモジュール機能自体は使用していません。
おそらく次のようなことをしたでしょう:
git clone git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
git add vendor/plugins/open_flash_chart_2
この最後のコマンドが問題です。ディレクトリvendor/plugins/open_flash_chart_2
は、独立したGitリポジトリとして始まります。通常、このようなサブリポジトリは無視されますが、git addに明示的に追加するように指示すると、サブリポジトリのHEADコミットではなくgitlinkエントリが作成されますディレクトリの内容を追加します。 git addがそのような「セミサブモジュール」の作成を拒否する場合、それは素晴らしいかもしれません。
通常のディレクトリは、Gitではツリーオブジェクトとして表されます。ツリーオブジェクトは、名前と、それに含まれるオブジェクト(通常、他のツリーオブジェクトとBLOBオブジェクト-それぞれディレクトリとファイル)にアクセス許可を与えます。サブモジュールは「gitlink」エントリとして表されます。 gitlinkエントリには、サブモジュールのHEADコミットのオブジェクト名(ハッシュ)のみが含まれます。 gitlinkのコミットの「ソースリポジトリ」は.gitmodules
ファイル(およびサブモジュールが初期化されると.git/config
ファイル)で指定されます。
持っているのは、そのコミットのソースリポジトリを記録せずに、特定のコミットを指すエントリです。これを修正するには、gitlinkを適切なサブモジュールにするか、gitlinkを削除して「通常の」コンテンツ(プレーンファイルおよびディレクトリ)に置き換えます。
vendor/plugins/open_flash_chart_2
をサブモジュールとして適切に定義するために不足しているのは、.gitmodules
ファイルのみです。通常(まだgitlinkエントリとして追加していない場合)、単にgit submodule add
を使用します:
git submodule add git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
ご存知のように、インデックスにパスが既に存在する場合、これは機能しません。解決策は、インデックスからgitlinkエントリを一時的に削除し、サブモジュールを追加することです。
git rm --cached vendor/plugins/open_flash_chart_2
git submodule add git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
これにより、既存のサブリポジトリが使用され(ソースリポジトリが再クローンされません)、次のような.gitmodules
ファイルがステージングされます。
[submodule "vendor/plugins/open_flash_chart_2"]
path = vendor/plugins/open_flash_chart_2
url = git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
メインリポジトリの.git/config
(path
設定なし)にも同様のエントリを作成します。
それをコミットすると、適切なサブモジュールができます。リポジトリのクローンを作成する(またはGitHubにプッシュしてそこからクローンを作成する)とき、git submodule update --init
を介してサブモジュールを再初期化できるはずです。
次のステップでは、vendor/plugins/open_flash_chart_2
のサブリポジトリに保存したいローカル履歴がないことを前提としています(つまり、関心があるのは履歴ではなく、サブリポジトリの現在の作業ツリーのみです)。
気になるサブリポジトリにローカル履歴がある場合、以下の2番目のコマンドで削除する前にサブリポジトリの.git
ディレクトリをバックアップする必要があります。(サブリポジトリのHEADの履歴を保持する以下のgit subtreeの例も考慮してください)。
git rm --cached vendor/plugins/open_flash_chart_2
rm -rf vendor/plugins/open_flash_chart_2/.git # BACK THIS UP FIRST unless you are sure you have no local changes in it
git add vendor/plugins/open_flash_chart_2
今回はディレクトリを追加するとき、サブリポジトリではないため、ファイルは通常どおり追加されます。残念ながら、.git
ディレクトリを削除したため、ソースリポジトリを最新の状態に保つための非常に簡単な方法はありません。
代わりに subtree merge を使用することを検討してください。そうすることで、リポジトリ内のファイルを「フラット」に保ちながら(サブモジュールなしで)ソースリポジトリから簡単に変更を取り込むことができます。サードパーティの git subtree command は、サブツリーマージ機能のニースラッパーです。
git rm --cached vendor/plugins/open_flash_chart_2
git commit -m'converting to subtree; please stand by'
mv vendor/plugins/open_flash_chart_2 ../ofc2.local
git subtree add --prefix=vendor/plugins/open_flash_chart_2 ../ofc2.local HEAD
#rm -rf ../ofc2.local # if HEAD was the only tip with local history
後:
git remote add ofc2 git://github.com/korin/open_flash_chart_2_plugin.git
git subtree pull --prefix=vendor/plugins/open_flash_chart_2 ofc2 master
git subtree Push --prefix=vendor/plugins/open_flash_chart_2 [email protected]:me/my_ofc2_fork.git changes_for_pull_request
git subtreeには--squash
オプションもあり、これを使用すると、ソースリポジトリの履歴を履歴に組み込むことなく、上流の変更を取り込むことができます。
私はちょうど同じ問題を抱えていました。その理由は、「。git」フォルダーを含むサブフォルダーがあったためです。削除するとgitは幸せになりました。
参照URL https://danielmiessler.com/blog/git-modified-untracked/#gs.W0C7X6
私がクリス・ヨハンセンのOPとのチャット(回答から回答へのリンク)を掘り下げなければならなかったことを指摘するには:
git add vendor/plugins/open_flash_chart_2
#はgitlinkを追加し、コンテンツは追跡されないままになります
git add vendor/plugins/open_flash_chart_2/
#SLASHに注意してください!!!!
2番目のフォームはgitlinkなしで追加し、内容は追跡可能です。 .git dirは便利で自動的に無視されます。クリスありがとう!
「偽のサブモジュール」と呼ばれる、ピーターラダが常に提案するトリックを使用します。
http://debuggable.com/posts/git-fake-submodules:4b563ee4-f3cc-4061-967e-0e48cbdd56cb
いくつかのシナリオで非常に便利です(peを使用して、elpa/el-getパッケージディレクトリ内のすべてのgitリポジトリの現在のHEADを含む、すべてのEmacs設定をリポジトリに保持します。何らかの更新が何かを中断した場合、既知の動作バージョンに戻る/進む)。
http://progit.org/book/ch6-6.html
これを読んでサブモジュールについて少し学ぶ必要があると思います。よく書かれており、読むのにそれほど時間はかかりません。
多くのサブモジュールがある大きなプロジェクトでも同じ問題がありました。 Chris Johnsenhere および VonChere の回答に基づいて、既存のすべてを反復する短いbashスクリプトを作成しますgitlinkエントリを適切なサブモジュールとして追加します。
#!/bin/bash
# Read all submodules in current git
MODULES=`git ls-files --stage | grep 160000`
# Iterate through every submodule path
while read -r MOD; do
# extract submodule path (split line at whitespace and take string with index 3)
ARRIN=(${MOD})
MODPATH=${ARRIN[3]}
# grep module url from .git file in submodule path
MODURL=`grep "url = " $MODPATH/.git/config`
MODURL=${MODURL##*=}
# echo path and url for information
echo $MODPATH
echo $MODURL
# remove existing entry in submodule index
git rm --cached $MODPATH
# add new entry in submodule index
git submodule add $MODURL $MODPATH
done <<< "$MODULES"
これは私のためにそれを修正しました、私はそれが助けになることを願っています。
この質問はすでに回答されていますが、これらのメッセージを受け取ったときに見つけたものをミックスに追加すると思いました。
playground
という名前のレポジトリがあり、そこには多くのサンドボックスアプリが含まれています。チュートリアルのレポを複製して、チュートリアルの2つの新しいアプリをplayground
ディレクトリに追加しました。その結果、新しいアプリのgitスタッフは、私のレポではなくチュートリアルのレポを指すようになりました。解決策は、これらのアプリの各ディレクトリから.git
ディレクトリを削除し、mv
playground
ディレクトリの外にあるアプリのディレクトリを削除してから、mv
ディレクトリを削除して実行することでしたgit add .
。その後、動作しました。
これは私にとってはうまくいきました:
git update-index --skip-worktree
パス名が機能しない場合は、ファイル名を試してください。これがあなたにとってもうまくいったかどうか教えてください。
さようなら!
私は最近、契約プロジェクト(機密扱いとみなされる)の作業中にこの問題に遭遇しました。私がコードを実行しなければならなかったシステムは、もちろんセキュリティのためにインターネットにアクセスできなかったので、composerとnpmを使用して依存関係をインストールすることは大きな苦痛になりました。
同僚とよく検討した結果、composer installまたはnpm installを実行するのではなく、単にwingし、依存関係をコピーペーストすることにしました。
これにより、gitignoreにベンダーとnpm_modulesを追加しないことになりました。これは私がこの問題に遭遇したときです。
Changed but not updated:
modified: vendor/plugins/open_flash_chart_2 (modified content, untracked content)
私はこれを少しグーグルで検索し、SOでこの役立つスレッドを見つけました。 Gitでプロになりすぎず、作業中に少し酔ってしまったため、ベンダーフォルダー内のすべてのサブモジュールを検索しました。
find . -name ".git"
これにより、gitが含まれていた4〜5個の依存関係が得られました。これらすべての.gitフォルダーと出来上がりを削除しましたが、うまくいきました。私はそれがハックであることを知っています、とにかくあまりオタクではありません。神々よ、許してください!次回はgitlinksを読み、Oの強力なLinus Tovaldsに従うことを約束します。
同じ問題がありましたが、この議論では解決されませんでした。
スレッドの開始で説明したように、サブモジュールの問題もヒットしました。
% git status
# On branch master
# Changes not staged for commit:
# modified: bundle/taglist (untracked content)
Diffを見ると、ハッシュに-dirtyが追加されていることがわかりました。ドキュメントをもう一度読んで、問題を解決しました。 http://web.mit.edu/jhawk/mnt/spo/git/git-doc/user-manual.html 「サブモジュールの落とし穴」セクションをご覧ください
理由は、サブモジュール内に変更または追跡されていないコンテンツがあったことです。最初にサブモジュールディレクトリに移動し、「git add」+「git commit」を実行して、サブモジュール内のすべてのコンテンツを追跡する必要がありました。
Then "git status" on the master stated
% git commit
# On branch master
# Changes not staged for commit:
# modified: bundle/taglist (new commits)
これで、サブモジュールからのこの新しいHEADをマスターモジュールにコミットできます。
まずDirectoryに移動します:vendor/plugins/open_flash_chart_2およびDELETE
THEN:
git rm --cached vendor/plugins/open_flash_chart_2
git add .
git commit -m "Message"
git Push -u Origin master
git status
出力
ブランチマスター上
ブランチは「Origin/master」で最新です。
何もコミットせず、作業ディレクトリをクリーンにします