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
.
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 )
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/ )
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.
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
).
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
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