web-dev-qa-db-fra.com

Comment faire en sorte que le référentiel externe et le référentiel intégré fonctionnent comme un référentiel commun/autonome?

J'ai un gros projet (disons A repo), et il y a un dossier enfant qui provient de B repo. Je voudrais répondre à l'avertissement comme ci-dessous lorsque je commets à partir de 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.

J'ai vu git-submodule et git-subtree:

Maintien du repo Git dans un autre repo Git

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

Mais je ne les aime pas, car ils ont besoin de plus de configuration.


Ce que je veux, c'est par exemple:

structure comme:

A/
--- a.py

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

Quand je change de B/b.py.

  1. Si je suis sur le chemin A/, git add peut détecter que B/b.py a changé, git Push ne l'engage que dans un rapport. 

    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. Si je suis sur le chemin A/B/, git add n'ajoute que B/b.py modifications au référentiel B, et git Push ne le consomme que dans le référentiel 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. Une fois que je veux utiliser A et B dans une autre machine, il suffit de

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

Dans un autre mot, A et B agissent comme un dépôt autonome.

Mais la vérité est qu’un repo traite un repo B comme un sous-module: 

Un repo https://github.com/eromoe/test

B repo https://github.com/eromoe/test2


Comment forcer un référentiel à suivre tous les fichiers sous A/ et un référentiel B à suivre tous les fichiers sous A/B/? Je veux que A et B agissent comme un dépôt autonome, sans autre configuration.

6
Mithril

Vous pouvez utiliser les commandes ci-dessous pour ajouter des fichiers à partir du dépôt test2 afin de tester le dépôt comme suit:

# 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

Remarque:  

Vous devez utilisergit add test2/(avec une barre oblique, pas git add test2).

git add test2/ traitera le dossier test2 et ses fichiers comme un dossier ordinaire et un fichier pour le dépôt de test (mode de création 100644). 

git add test2 traitera le dossier test2 comme un sous-module pour le dépôt de test (mode de création 160000).

5
Marina Liu - MSFT

Git a probablement rappelé le référentiel. Cela m'a aidé:

 git rm --cached votre_folder_with_repo 
 git commit -m "retirer le dépôt encaissé" 
 git ajoute votre_folder_with_repo /
 git commit -m "Ajouter un dossier" 
 git Push 
0
rost shan

Si vous ne vous souciez pas de la version exacte de B A utilisée, vous pouvez conserver votre paramètre actuel (repo git imbriqué).

Vous aurez l'avertissement "Embo Repo" intégré, mais à côté de cela, les deux pensions se comporteront comme prévu, chacune ajoutant, validant et poussant uniquement leur pension.
Remarque: vous pouvez rendre cet avertissement court-circuité/vide avec git config advice.addEmbeddedRepo

0
VonC