2010-12-08 31 views
0

J'ai un lien réseau très lent vers mon dépôt distant (appelez-le repoSlow) à partir duquel je vais de temps en temps à mon dépôt principal de développement (appelez-le repo1).git fetch à partir d'un second degré

Parfois, je clone repo1 à repo2 dans un autre répertoire pour effectuer des tests par ex. sur d'autres branches sans perdre l'état de repo1 (également concernant les fichiers objets et les bibliothèques, donc une simple sauvegarde ne le fera pas). Pour obtenir l'état de repoSlow dans repo2, je dois généralement stocker dans repo1, checkout et fusionner chaque branche (je suis intéressé) de repoSlow à repo1, puis les récupérer dans repo2.

Outre le fait que c'est une procédure lourde et quelques autres points, je ne veux parfois pas fusionner dans repo1. L'extraction d'un autre nom de branche locale entraînera un gros désordre de nommage.

Existe-t-il un moyen simple et direct d'aller chercher la télécommande d'une télécommande? Je pense qu'un meilleur flux de travail pourrait consister à cloner repoSlow en un seul dépôt local (ou même en miroir?) Et à le cloner plusieurs fois, mais pour mieux comprendre git, je maintiens la question initiale.

Répondre

0

Vous avez raison, il serait probablement préférable de cloner un dépôt local seul comme point d'intégration, puis de cloner votre repo1 et repo2 à partir de cela.

Mais pour répondre à votre question initiale, je ne crois pas qu'il existe un moyen de récupérer directement la télécommande d'une télécommande; mais vous pouvez simplement ajouter repoSlow en tant que remote dans repo2 après l'avoir cloné depuis repo1. Si vous faites cela, il vous suffira d'aller chercher dans repoSlow les choses qu'il n'a pas clonées depuis repo1, ce qui devrait être considérablement plus rapide que l'historique complet.

Pour ce faire, il suffit d'exécuter ce qui suit à l'intérieur repo2:

git remote add upstream git://example.com/path/to/repo/slow.git 
git remote update 

Maintenant, vous devriez avoir deux télécommandes repo2; origin se référant à repo1, et upstream (ou tout ce que vous voulez l'appeler) pointant vers votre repoSlow.

0

Vous pouvez faire une configuration comme celui-ci dans repo2:

[remote "origin"] 
     fetch = +refs/heads/*:refs/remotes/origin/* 
     fetch = +refs/remotes/origin/*:refs/remotes/ancestor/* 

Cela dit repo2 non seulement chercher les branches de repo1 (et les miroir comme origin/*), mais aussi chercher des branches de suivi de repo1 de son origine (et miroir Alors maintenant, vous n'avez qu'à faire un "git fetch" dans repo1 pour récupérer les changements de repoSlow, sans changer de branche locale, et vous pourrez aussi récupérer ces changements dans repo2.