サブフォルダーを指すようにgitサブモジュールを変更するにはどうすればよいですか?


101

流し読みサブモジュールのチュートリアル、私は外のサブモジュールを作成したのbotoプロジェクト。その後、実際にはこのプロジェクトのサブセット、特にbotoフォルダーだけが必要であることがわかりました

このフォルダを指すようにサブモジュールを変更したいと思います。.gitmodulesを見ると、

[submodule "backup/src/boto"]
    path = backup/src/boto
    url = https://github.com/boto/boto.git

https://github.com/boto/boto.gitの代わりにどのURLを使用すればよいですか?URLを変更した後、botoフォルダーをローカルで削除して再度プルする必要がありますか?


3
それはあなたが望むものではありません-サブモジュールではありません-あなたは見るかもしれませんgit subtree
Cascabel

1
最終的にサブモジュール全体を用意し、IntelliJにbotoフォルダーが「ソースフォルダー」であることを伝え、そこからパッケージを見つけられるようにしました。
ripper234 2011年

15
gitがこれをネイティブで行わないとは信じられません...
rogerdpack

2
-同様の質問が見つかりstackoverflow.com/questions/1121227/...
sashoalm

回答:


65

サブモジュールのURLは常にリポジトリをポイントするだけです。gitが「狭いクローン」を一般的にサポートしていないのと同じように、リポジトリのサブフォルダだけが必要であると指定することはできません。

リポジトリ全体をサブモジュールとして使用することができない場合は、botoからクローンを作成する新しいリポジトリを常に作成し、cronジョブを設定して次のようにすることができます。

  1. git fetch そのリポジトリをディレクトリに
  2. git filter-branchサブディレクトリが最上位にあるブランチを更新するために使用します。
  3. リポジトリのブランチをサブモジュールとして追加します。ただし、それは少し手間がかかります。私の好みは、リポジトリ全体をサブモジュールとして使用することです。

24

リポジトリの一部のみを複製することはできません。これは、gitがリポジトリをオブジェクト全体として扱うためです。取得すると、すべて取得されます

したがって、ここでの解決策は、サブモジュールを別のディレクトリでフェッチし、シンボリックリンクを使用して目標を達成することです。


私はウィンドウにシンボリックリンクを持っています...うまくいきます。(これは、自分のマシンにmsysをインストールしたためln -s、Linuxのように使用できるためです)
kumarharsh

7
Vistaおよび&にはMKLinkが付属しています。私が使っています。howtogeek.com/howto/windows-vista/…–
エンジェルS.モレノ

1
代わりにハードリンクを使用できます
KindDragon

15

やりたいことは、サブモジュールにブランチを作成し、フォルダーを上に移動して、不要なものを削除することです。その後、代わりにそのブランチを管理できます。変更をプッシュしたい場合は、最初にバックマージできるはずです。Gitはファイルを移動したことを認識し、マージを正常に実行します。

お役に立てれば。


「バックマージ」とは何ですか?例を提供できますか?
スキマスイッチ

「上流」に行くマージ-より高次のブランチから低次のブランチへ。ライナスはそれらを嫌っています。彼らはすでにマージされているかもしれない他のブランチからの歴史を結びつけます。
Adam Dymitruk 2013

この状況での「バックマージ」に関する例を追加していただけませんか。
Xiao

通常は、メインラインブランチからマージして最新の変更を誰もがマージすることで、機能ブランチを最新の状態に維持しようとするときです。これはあなたのブランチを他の人の仕事に結びつけるので悪いです。製品がブランチを必要とするが、統合ブランチにすでにある他のブランチを必要としない場合、それは不可能です。
Adam Dymitruk 2013

面白いアイデア、誰かがこれを試したことがありますか?すぐに試してみるつもりですが、「バックマージ」が明確で自動化できるかどうかはまだわかりません...
moudrick
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.