[解決済み] 未追跡のコンテンツを追跡する方法は?
質問
最初の質問は、実線の下をご覧ください。
ローカルディレクトリに追跡されていないフォルダがあります。私が
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 サブモジュール
を使用していますが(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
は、保存したいローカルな履歴を持ちません(つまり、気になるのはサブリポジトリの現在の作業ツリーだけで、履歴ではありません)。
もしサブリポジトリに気になるローカル履歴があるのなら、サブリポジトリの
.git
ディレクトリを削除する前に、以下の2番目のコマンドで削除してください。
(また
ギットサブツリー
の例では、サブリポジトリの 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 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
ギットサブツリー
もまた
--squash
オプションを使用すると、ソースリポジトリの履歴を自分の履歴に取り込まないようにできますが、それでも上流の変更を取り込むことはできます。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] 既存の、プッシュされていないコミットメッセージを修正するには?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] 新しいローカルブランチをリモートの Git リポジトリにプッシュし、それを追跡するにはどうすればよいのでしょうか?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】サブモジュールを削除する方法は?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】git revert <hash> not allowed due to a merge but no -m option was given.
-
[解決済み】ERROR: Error cloning remote repo 'origin'.
-
[解決済み] 現在の支店にはトラッキング情報がありません
-
[解決済み] GitBash | origin master - rejected (fetch first) | GitHub リポジトリにファイルがない。
-
[解決済み] Git エラー : 'upstream' は git リポジトリでないようです。
-
[解決済み] GitのFETCH_HEADとはどういう意味ですか?
-
[解決済み] Gitのフォルダ構造で変更・追加されたファイルのみをエクスポートする機能
-
[解決済み] git update-index --assume-unchanged <file> を元に戻す。
-
[解決済み] 新しいBitbucketでリポジトリを削除するにはどうすればよいですか?
-
[解決済み] サブモジュールでないパスに対するサブモジュールのマッピングが .gitmodule に見つからない