112 votes

Deux dépôts git dans un même répertoire ?

Est-il possible d'avoir 2 dépôts git dans un même répertoire ? Je pense que non, mais j'ai pensé poser la question. En gros, j'aimerais vérifier dans mon répertoire personnel les fichiers de configuration (par exemple .emacs) qui devraient être communs à toutes les machines sur lesquelles je travaille, mais avoir un second dépôt pour les fichiers locaux (par exemple .emacs.local), qui contient des configurations spécifiques à la machine. Le seul moyen auquel je pense pour faire cela est d'avoir la configuration locale dans un sous-répertoire et d'ignorer ce sous-répertoire du dépôt git principal. D'autres idées ?

4voto

Pat Notz Points 46841

Oui, les sous-modules sont probablement ce que vous voulez. Une autre option serait d'avoir votre copie de travail dans un sous-répertoire et de pointer des liens symboliques depuis votre répertoire personnel vers les fichiers qui vous intéressent.

4voto

Ma méthode préférée est d'utiliser un repo dans un sous-dossier, et d'utiliser des liens symboliques récursifs :

git clone repo1
cd somerepo
git clone repo2
cd repo2
./build

où les ' repo/build Le fichier '-file' se présente comme suit :

#!/bin/bash 
SELF_PATH="$(dirname "$(readlink -f "$0")" )"  # get current dir 
cd .. && git stash && git clean -f -d ''       # remove previous symlinks
cp -sR "$SELF_PATH"/* ../.                     # create recursive symlinks in root

prudence : ne pas utiliser 'git add .'

1voto

user Points 1825

L'autre option consiste à les placer dans des dossiers distincts et à créer des liens symboliques d'un dossier à l'autre.

Par exemple, s'il existe des référentiels :

  1. Repo1/DossierA
  2. Repo1/DossierB

Et.. :

  1. Repo2/DossierC

Vous pouvez établir un lien symbolique entre les dossiers FolderA y FolderB de la Repo1 vers la Repo2. Pour Windows, la commande à exécuter sur la Repo1 serait la suivante :

User@Repo1$ mklink /J FullPath/Repo2/FolderA FullPath/Repo1/FolderA
User@Repo1$ mklink /J FullPath/Repo2/FolderB FullPath/Repo1/FolderB
User@Repo1$ printf "/FolderA/*\n/FolderB/*\n" >> .gitignore

Pour les fichiers sur les dépôts principaux, vous devrez établir un lien symbolique pour chacun d'entre eux, en les ajoutant également au dépôt. .gitignore pour éviter le bruit, à moins que vous ne le souhaitiez.

0voto

user1810087 Points 1384

Avertissement : Ceci n'est pas de la publicité. Je suis le développeur de la bibliothèque fournie.

J'ai créé une extension git pour gérer les cas où vous voulez mélanger plusieurs dépôts dans un seul dossier. L'avantage de cette librairie est de garder une trace des dépôts et des conflits de fichiers. Vous pouvez la trouver sur github . Il y a également 2 dépôts d'exemples pour l'essayer.

0voto

anton_rh Points 1582

L'OP souhaite fusionner les fichiers de plusieurs dépôts dans un seul répertoire.

Mais si vous ne voulez pas de fusion et que vous avez plutôt besoin de passer d'un dépôt à l'autre dans un seul répertoire :

mkdir repo
cd repo
git init
git remote add first https://first/repo.git
git remote add second https://second/repo.git
git fetch first
git fetch second
git checkout first/master -b master

Vous pouvez désormais passer d'un répertoire à l'autre et même sélectionner les commits entre les dépôts.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X