web-dev-qa-db-ja.com

外部リポジトリと埋め込みリポジトリを共通/スタンドアロンリポジトリとして機能させる方法は?

私には大きなプロジェクトがあります(たとえば[A repo])、B repoから派生した1つの子フォルダーがあります。 A repoからコミットすると、次のような警告が表示されます。

warning: adding embedded git repository: extractor/annotator-server
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint:
hint:   git submodule add <url> extractor/annotator-server
hint:
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint:
hint:   git rm --cached extractor/annotator-server
hint:
hint: See "git help submodule" for more information.

git-submodulegit-subtreeを見ました:

別のgitリポジトリ内にGitリポジトリを維持する

https://www.atlassian.com/blog/git/alternatives-to-git-submodule-git-subtree

しかし、追加の設定が必要なので、私はそれらが好きではありません。


私が欲しいのは、例えば:

次のような構造:

A/
--- a.py

--- B/
--- B/b.py

B/b.pyを変更したとき。

  1. パスA/にいる場合、git addB/b.pyの変更を検出でき、git PushはそれをAリポジトリにコミットするだけです。

    git add .   (would add changes under A/  )
    git Push   (would Push changes under A/  )
    git pull   (would pull changes under A/  )
    git clone XXX:A  (would clone all files under A/ ,    A/B/ is just looks like plain folder with all files, not a repo )
    
  2. パスA/B/にいる場合、git addはBリポジトリにB/b.py変更のみを追加し、git PushはBリポジトリにのみコミットします。

    git add .   (would add changes under B/ , but not add changes to A repo)
    git Push   (would Push changes under B/ , but not Push changes to A repo)
    git pull   (would clone changes under B/ ,  )
    git clone XXX:B  (would clone all files under B/  )
    
  3. 別のマシンでAとBをsnycしたい場合は、

    git clone A
    rm -rf A/B/
    git clone B ./B
    git add . && git commit 'sync with B'
    

別のWordでは、AとBはスタンドアロンリポジトリとして機能します。

しかし、真実は、AレポはBレポをサブモジュールとして扱います:

リポジトリ https://github.com/eromoe/test

Bリポジトリ https://github.com/eromoe/test2


AリポジトリがA/の下のすべてのファイルを追跡し、BリポジトリがA/B/の下のすべてのファイルを追跡するにはどうすればよいですか? AとBは、他の設定なしで、自己完結型のレポとして機能します。

16
Mithril

以下のコマンドを使用して、test2リポジトリからファイルを追加して、以下のようにリポジトリをテストできます。

# In local test repo
rm -rf test2
git clone https://github.com/eromoe/test2
git add test2/
git commit -am 'add files from test2 repo to test repo'
git Push

注:

git add test2/git add test2ではなくスラッシュを使用)を使用する必要があります。

git add test2/test2フォルダーとそのファイルを通常のフォルダーおよびテストリポジトリ用のファイルとして作成します(作成モード100644)。

git add test2は、test2フォルダーをテストリポジトリ(作成モード160000)のサブモジュールとして扱います。

13
Marina Liu

おそらく、gitはリポジトリを思い出させました。それは私を助けました:

 git rm --cached your_folder_with_repo 
 git commit -m "キャッシュされたレポを削除" 
 git add your_folder_with_repo /
 git commit -m "フォルダーの追加" 
 git Push 
8
rost shan

B Aが使用している正確なバージョンを気にしない場合は、現在の設定を保持できます(ネストされたgitリポジトリ)。

「埋め込みリポジトリ」警告が表示されますが、それ以外に、両方のリポジトリが期待どおりに動作し、それぞれがリポジトリのみを追加、コミット、プッシュします。
注: git config advice.addEmbeddedRepo

2
VonC