2010-04-15 6 views
13

J'utilise actuellement git sur windows via une combinaison de msysgit et Cygwin.Comment joindre plusieurs URL à une seule télécommande git?

J'ai un ordinateur portable que je déplace un peu, donc ce n'est pas sur un emplacement cohérent. Malheureusement, je n'ai pas de nom cohérent car le nom de l'ordinateur n'est pas résolu sur tous les emplacements auxquels je me connecte, donc je ne peux pas simplement utiliser le nom de l'ordinateur comme hôte pour l'URL (par exemple: git:// compname/repo), donc je dois utiliser l'adresse IP.

Existe-t-il un moyen d'ajouter plusieurs URL à partir d'une télécommande particulière? Je l'ai vu

git remote set-url --add [--push] <name> <newurl> 

comme un moyen d'ajouter plusieurs URL à une télécommande, et je peux voir les mises à jour dans le fichier .git/config, mais git essaye seulement d'utiliser le premier.

Existe-t-il un moyen pour que git essaie d'utiliser toutes les URL? J'ai essayé à la fois git fetch et git remote update, mais ni ne tente rien après la première url.

Notez que je n'ai pas encore essayé sur Linux, et je ne peux pas corriger la résolution du nom de l'ordinateur car cela fonctionne.

+1

Je ne pense pas que Git supporte plusieurs URL ** à distance ** (récupérer à partir de la première URL de réponse, pousser à toutes les URL) , vous devez donc utiliser une télécommande par URL actuellement. –

+1

duplication possible de [tirer/pousser depuis plusieurs emplacements distants] (http://stackoverflow.com/questions/849308/pull-push-from-multiple-remote-locations) – RedX

+0

Voir http://stackoverflow.com/questions/ 849308/pull-push-from-multiple-remote-locations deuxième réponse – RedX

Répondre

0

Je suggère d'utiliser une autre télécommande comme point de synchronisation entre votre ordinateur portable et les autres ordinateurs que vous utilisez.

par exemple. github.

Si vous souhaitez le garder privé, essayez le mode non-codé ou codaset.

+0

J'aimerais pouvoir le faire, mais j'ai besoin de mettre en place un serveur git sur une boîte de Windows sur une infrastructure informatique assez verrouillée pour le retirer. Pousser vers un référentiel en dehors de l'intranet n'est pas autorisé. – deterb

1

Personnellement, je ne la même chose, ce que j'est deux télécommandes

origine: emplacement de mon repo quand à la maison foriegn: emplacement de mon repo quand nulle part ailleurs (mes dns redirigent à ma maison)

alors je viens de pousser/tirer sur la télécommande appropriée, c'est un peu brouillon mais ça marche.

2

Je pense que votre meilleur mieux est de définir votre URI à distance pour pointer vers computername mais puis ajouter computername à votre fichier hosts (situé à %SystemRoot%\system32\drivers\etc\hosts):

computername 192.168.100.34 
# computername 192.168.100.68 

Ensuite, vous pouvez conserver plusieurs entrées pour les différents IP adresse et commente/décommente-les au besoin. Plus besoin de changer l'adresse URI distante par repo, il suffit de la mettre à jour à un endroit et ensuite à tous les repos en utilisant computername car l'URI utilisera le nouvel emplacement.

+0

Ne pas avoir accès à etc/hosts malheureusement – deterb

+0

@deterb Que voulez-vous dire "ne pas avoir accès? Il devrait y avoir l'équivalent d'un fichier hosts quel que soit le système d'exploitation que vous utilisez: http: //en.wikipedia .org/wiki/Hosts_% 28file% 29 # Location_dans_le_fichier_fichier – IQAndreas

1

Cette approche est inspirée par la réponse de @Mark Stickley. Cela fonctionne même si vous avez deux numéros de port différents (et pas seulement des noms d'hôtes) pour accéder à la même machine à partir de deux emplacements différents.

Vous pouvez conserver plusieurs versions de ~/.ssh/config en fonction du nombre de situations. Par exemple, dans mon cas chez moi, j'accède à mon serveur avec le nom d'hôte my-fancy-server et le port 22. Au bureau, le nom d'hôte est my-dyndns-name et le nom du port est XXX. J'ai donc deux versions de ~/.ssh/config. À la maison, il dit:

Host home 
    my-fancy-server 
    Port 22 
    User abhishek 
    IdentityFile /home/abhishek/.ssh/id_rsa 

(. S'il vous plaît ajuster il deux dernières valeurs en conséquence la dernière est pas nécessaire si vous ne l'utilisez les touches) Au bureau, il dit

Host home 
    my-dyndns-name 
    Port XXX 
    User abhishek 
    IdentityFile /home/abhishek/.ssh/id_rsa 

J'ai un script qui ajuste le contenu de ~/.ssh/config lorsque je déménage dans un nouvel emplacement. On pourrait même automatiser cela en écrivant un script qui est déclenché par des changements dans le réseau.

je ne dispose que d'une seule télécommande dans mon fichier de configuration git qui ressemble

[remote "origin"] 
    url = home:/path/to/repo 
    fetch = +refs/heads/*:refs/remotes/origin/* 

EDIT: Je viens de découvrir que je ne dois faire tout cela. Je viens d'activer le bouclage nat sur mon routeur et maintenant je peux accéder uniformément à mon ordinateur en utilisant le nom/port externe. Cependant, dans de nombreuses situations, comme un réseau d'entreprise, il peut ne pas être possible de jouer avec le routeur.

Questions connexes