追跡されていないコンテンツを追跡するにはどうすればいいですか? 質問する

追跡されていないコンテンツを追跡するにはどうすればいいですか? 質問する

私の元の質問については、下の実線を参照してください。

ローカル ディレクトリに追跡されていないフォルダーがあります。 を実行すると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 の完全な初心者で、ドキュメントを読んだにもかかわらず、これらの特定の問題に少し困惑しています。ありがとうございます。

ベストアンサー1

「gitlink」エントリとして追加しましたがvendor/plugins/open_flash_chart_2、サブモジュールとして定義されていません。実際には、内部機能を使用しています。git サブモジュール(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 追加明示的に追加すると、ディレクトリの内容を追加する代わりに、サブリポジトリのHEADコミットを指すgitlinkエントリが作成されます。git 追加このような「セミサブモジュール」の作成を拒否します。

通常のディレクトリは 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保存したいローカル履歴がないことを前提としています (つまり、履歴ではなく、サブリポジトリの現在の作業ツリーだけを重視します)。

必要なサブリポジトリにローカル履歴がある場合は、.git以下の 2 番目のコマンドで削除する前に、サブリポジトリのディレクトリをバックアップする必要があります。(また、git サブツリー以下に、サブリポジトリの HEAD の履歴を保持する例を示します。

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ソースリポジトリを最新の状態に保つ非常に簡単な方法はありません。

使用を検討してもよいでしょうサブツリーのマージ代わりに、ソースリポジトリからの変更を簡単に取り込むことができます。リポジトリ内のファイルは「フラット」な状態(サブモジュールなし)で保持されます。サードパーティのgit サブツリー指示サブツリーのマージ機能をラップする優れたラッパーです。

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 サブツリーまた、--squashソース リポジトリの履歴を自分の履歴に組み込まないようにしながらも、アップストリームの変更をプルできるようにするオプションもあります。

おすすめ記事