2010-09-19 16 views
1

Comment puis-je cloner un git repo depuis mon ordinateur portable (chez moi) vers un serveur (à l'université) tout en obtenant la plus grande partie du repo d'un troisième (svn) repo à une autre uni qui est la base de code principale. Je veux minimiser le montant de la maison < -> trafic uni en maximisant le trafic uniOne < -> uniTwo.Cloner un dépôt git-svn en récupérant la totalité de la partie svn depuis le repo svn original

c'est ce que j'ai maintenant sur ordinateur portable:

--o--o--o---o---o---o git-svn trunk 
     `--o--o-o--o git mybranch 

ce que je voudrais obtenir sur Unione:

--o--o--o---o---o---o git-svn trunk <-- from uniTwo 
     `--o--o-o--o git mybranch <-- from Laptop 

Après le clonage du repo devrait être en mesure de tirer des branches d'ordinateur portable .

J'ai essayé: sur uniOne: git-svn clone uniTwo, git remote ajoute un ordinateur portable, mais git fetch veut tout savoir de l'ordinateur portable. Je pensais que peut-être en utilisant git clone --depth x Laptop et puis les greffer ensemble pourrait fonctionner, mais il faut encore tous les fichiers source à transférer Laptop-> uniOne, pas seulement les changements. Je pourrais essayer d'exporter tous les patchs de Laptop et les appliquer sur un nouveau svn checkout, puis l'obtenir pour suivre la branche sur mon portable (si c'est possible) mais il serait plus facile d'attendre jusqu'à ce que je sois à côté de uni et ensuite juste cloner normalement.

+0

Votre description uniOne/uniTwo est légèrement déroutante. Pourriez-vous peut-être mettre à jour et clarifier? C'est ce que j'ai compris jusqu'à présent: Il existe un référentiel Subversion dans votre université avec lequel vous devez interagir. Vous voulez cloner un projet dans ce dépôt SVN dans un dépôt Git que vous pouvez ramener à la maison sur votre ordinateur portable, n'est-ce pas? –

+0

Il y a deux unis: l'un avec le svn repo (uniTwo), l'autre où j'ai accès à l'heure du grand ordinateur (uniOne). Je développe des simulations sur mon ordinateur portable et les exécute sur uniOne. Le point crucial est que les vitesses de téléchargement de mon ordinateur portable à la maison sont très lentes et que les trois ordinateurs sont très éloignés. Sur uniOne, j'aimerais pouvoir sortir de mon ordinateur portable mais, dans la mesure du possible, me rendre au svn repo chez uniTwo. – myles

Répondre

0

Définissons vos dépôts:

  • git-svn < - c'est le dépôt Subversion à l'Université
  • uni/maître < - c'est un dépôt Git à votre université. C'est un "référentiel d'extraction" qui récupère l'histoire la plus récente du repo de Subversion.
  • ordinateur portable/maître < - Ceci est le référentiel Git sur votre ordinateur portable. C'est ici que vous travaillez.

je suggère la configuration suivante:

Créer uni/maître en faisant git svn clone de git-svn. Mettre à jour automatiquement ou régulièrement uni/master avec les dernières modifications de git-svn en exécutant git svn rebase (déclencher avec un commit commit, cron-job, ou manuellement chaque fois que vous êtes à Uni).

Créer ordinateur portable/maître en clonant uni/master. Ici, vous pouvez vous engager localement aussi souvent que vous le souhaitez. Lorsque vous êtes à l'université, obtenez les dernières modifications de uni/master en exécutant git pull --rebase (vous devez toujours faire --rebase pour garder l'historique linéaire, car SVN ne comprendra pas git-branches).

Lorsque vous voulez pousser les changements de votre ordinateur portable retour à git-svn, vous devez configurer le git-svn à distance sur votre ordinateur portable /maître premier:

git svn init https://url.to.uni-svn-repo 

Maintenant vous pouvez pousser vos derniers changements de retour à uni-svn avec git svn dcommit. Notez que vous devrez peut-être mettre à jour la référence au dernier commit dans uni/master en premier. premier:

git update-ref refs/remotes/git-svn refs/remotes/uni/master 

NE PAS tenter de pousser à partir de votre ordinateur portable /maître à uni/maître. Cela n'apportera que du chaos car l'histoire de rebasing/rewriting ne fera que confondre Git quand il essayera de se synchroniser avec git-svn.

Voir aussi http://www.tfnico.com/presentations/git-and-subversion où j'ai commencé à rassembler un tas de conseils pour travailler ensemble avec Git et SVN.