2010-08-16 9 views
1

Est-ce faisable?Comment détacher le référentiel git local de son répertoire de travail?

Je voudrais avoir le répertoire .git sur un autre lecteur que le répertoire de paiement. Je ne pouvais pas trouver un moyen de détacher les deux. La raison en est: il y a une zone d'échange sur un lecteur réseau très lent et un espace limité et c'est un vrai cauchemar avec des délais d'expiration. Au moins, les opérations du référentiel (synchronisation avec un référentiel svn) peuvent alors être effectuées assez rapidement pour éviter les délais et la copie de fichier peut être effectuée par la suite à la caisse avec les mauvaises performances. Je ne pouvais pas trouver un moyen de faire face à cette situation (qui est hors de mon contrôle)

Je ne voudrais pas, mais s'il n'y a pas de meilleure suggestion, je le remplacerais par un dépôt git local et rsync le paiement dir dans les deux sens vers et depuis le lecteur lent.

Je parie que vous avez une meilleure idée!

Répondre

4

Vous pouvez set the GIT_DIR environment variable:

Si la variable d'environnement est définie $GIT_DIR il spécifie un chemin à utiliser au lieu de ./.git pour la base du référentiel.

Si définition d'une variable d'environnement est infaisable pour une raison quelconque, vous pouvez utiliser la --git-diroption avec toute commande git:

--git-dir=<path> 

Définissez le chemin d'accès au référentiel. Cela peut également être contrôlé en définissant la variable d'environnement GIT_DIR. Il peut s'agir d'un chemin absolu ou d'un chemin relatif vers le répertoire de travail actuel.

+0

Si vous avez vraiment besoin de faire cela, l'option de ligne de commande va être la bonne façon de procéder, sauf si vous avez seulement un repo, ce qui est une mauvaise chose à planifier! – Cascabel

+0

Merci pour l'indice. J'ai complètement négligé/mal compris ce que cette option était bonne. Je sais que mon cas d'utilisation est plutôt bizarre. Mais git peut faire face même avec une telle situation bizarre! :-) – jdehaan

2

Je suggère vraiment de garder votre entier repo sur votre lecteur préféré. Vous pouvez ensuite mettre un repo nu sur le lecteur au-delà de votre contrôle, et y pousser. C'est le meilleur moyen de minimiser vos interactions avec le mauvais stockage.

Si pour une raison quelconque, vous doit diviser une prise en pension sur plusieurs disques, pourquoi ne pas simplement créer le repo sur un lecteur, déplacez le répertoire .git à l'autre lecteur, puis .git dans faites des liens symboliques votre pension au .git déménagé annuaire.

+0

Malheureusement symlink n'est pas possible (webdav) et je dois aussi tirer/fusionner les changements ... Mais bon pourboire pour les autres +1. – jdehaan

+0

@jdehaan: Je ne vois pas comment cela vous empêche d'utiliser un repo nu - vous faites tout le travail dans le vôtre (commettre, fusionner/tirer, rebaser, peu importe) et juste pousser quand les choses sont finales. Vous ne voulez simplement pas l'étape supplémentaire? En ce qui concerne tout le monde, un répertoire .git vivant sur le lecteur réseau est à peu près identique à un repo nu vivant là. – Cascabel

+0

Il y a des gens qui doivent mettre des données sur le disque et ne doivent pas/ne peuvent pas accéder aux repos git pour des raisons politiques. – jdehaan

Questions connexes