2017-02-04 2 views
3

私は "foo"という名前のgithubリポジトリ(あるいは "myusername/foo")を持っています。ここで、fooのコードを使用する "bar"という名前のリポジトリを作成したいとします。私はファイルのコピーを作成することができますが、私は更新を取り込む必要はありません - 私はいつも "foo"リポジトリにあるものだけを見たいと思っています。 fooからの更新をコミットしないようにします。私は、サブフォルダが実際に別々のリポジトリであるいくつかのリポジトリに気づいたと思います。私はgitがサブリポジトリやそのようなものをサポートしていることを知っています。では、このような「リポジトリマウント」を実行できますか?もしそうなら、どうですか?私はむしろ、マスター1つのgithubリポジトリを別のリポジトリのサブフォルダとして "マウント"するにはどうしたらいいですか?

+1

サブモジュールを使用します。彼らは完璧ではありませんが、あなたの問題を解決するかもしれません。 –

+0

@TimBiegeleisen:リンク?そして、それはGitHubの機能かgitの機能なのですか? – einpoklum

+0

ここにあります:http://blog.joncairns.com/2011/10/how-to-use-git-submodules/ –

答えて

3

よりも、特定のバージョン、または特定の支店で「マウント」することができ

ボーナスポイント場合は、gitの中のサブプロジェクトを管理するための2つの主要なオプションがあります。
Gitはどの依存関係のマネージャーを持っていないし、最も一般的なオプションは以下のとおりです。

  • サブモジュール
  • サブツリー

Submodules
は、外部リポジトリをソースツリーの専用サブディレクトリに埋め込むことができます。常に、特定のコミットを指します。


git submodule

サブモジュールの各フォルダは、スタンドアロン・リポジトリになり、別の場所で管理して記憶する使用するために。 Gitは特定のコミット(コミット、バージョン、タグなど)をチェックアウトし、それをサブモジュールのHEADとして使用します。多くの場合、サブモジュールは分離されたHEADに置かれます。

# once you have a repo simply add it to git 
git submodule add <url> 

投影がレポに追加されたら、それを初期化して更新する必要があります。 のGitのよう

git submodule init 
git submodule update 

1.8.2オプション--remote

git submodule update --remote --merge 

を添加し、新しい意志fetch各サブモジュールの上流から最新の変更、merge them in、およびcheck outサブモジュールの最新リビジョン。the docsとして

はそれを説明します。

--remote

このオプションは、更新コマンドに対してのみ有効です。スーパープロジェクトの記録したSHA-1を使用してサブモジュールを更新する代わりに、サブモジュールのリモート追跡ブランチのステータスを使用します。

これは、各サブモジュールでgit pullを実行するのと同じです。


にはどうすれば解決するか、サブモジュール内の変更コードのですか?サブモジュールを使用して

その内容[新しいフォルダ]の一環として、メインプロジェクト内にコードを配置します。

フォルダ内にローカルに置くことと、サブモジュールの一部として持つことの違いは、サブモジュールでは、コンテンツが前述のように別のスタンドアロンリポジトリに管理(コミット)されることです。


これは、各プロジェクトがスタンドアロンプ​​ロジェクトである別のプロジェクト内のsubmodule-projectの図です。

enter image description here


git subtree

Gitのサブツリーは、あなたがに非常に類似した別の1

のサブディレクトリとして任意のリポジトリを挿入することができます主な違いは、コードが管理されている場所です。サブモジュールでは、コンテンツは別のレポに配置され、そこで管理され、他のレポにも複製することができます。

subtreeルートプロジェクトの一環としてではなく、別のプロジェクトでコンテンツを管理しています。

セットアップ方法を書き留めておき、使い方を理解する代わりに、この優れたポストを読んだだけで、すべてを説明することができます。サブモジュールとサブツリーの横に

https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/

+0

git submoduleについて:私は理解していません...(1)いつ「あなたがレポ "?どのCWDでいつサブコマンドを発行するのですか? (2)リストにあるコマンドのどこで、サブモジュールがどのサブフォルダにチェックアウトされているのかを指定するはずです。(3)HEADはブランチ上の最新のコミット以外は何ができますか? Corelibリポジトリの特定のコミットを選択すると、それは私の頭になります。それはリンク先の定義と矛盾しているようです。 – einpoklum

+1

(1):リポジトリを作成したら、元のリポジトリの一部ではないコードに新しいリポジトリを作成します。 (2)サブモジュールの名前がフォルダになるか、追加パラメータを渡して名前を指定することができます。 (3)gitは最新のものだけでなく、どんなコミットにも向けることができます。これを試してください: 'git checkout HEAD〜10' – CodeWizard

2

、特定のニーズに応じて、あなたもただのロジックおよび管理することなく、別のリポジトリを持っている場合があります。

このような場合、別のリポジトリをサブディレクトリに配置し、そのサブディレクトリを.gitignoreファイルに追加することができます。

など。

RepositoryA/ 
    - .gitignore (first option) 
    - SomeDir/ 
    - .gitignore (second option) 
    - RepositoryB/ 

.gitignore(最初のオプション)

これらのいずれかを追加します。

  • SomeDir/RepositoryB/
  • **/RepositoryB/

.gitignore(第二の選択肢)

この追加:

  • RepositoryB/

をこのように、私が言ったように、任意のロジック/管理を追加しません。両方のリポジトリのリビジョンを衝突させることなく使用することができます。

関連する問題