242 votes

Quelle est la -pratique - de la différence entre un Nu et non Nu référentiel?

J'ai lu sur le nu et non nu / default repositores dans Git. Je n'ai pas été en mesure de comprendre assez bien (en théorie) sur les différences entre eux, et pourquoi je devrais "push" pour un dépôt nu. Voici l'affaire:

Actuellement, je suis le seul à travailler sur un projet sur 3 ordinateurs différents, mais il n'y aura plus de personnes à plus tard, je suis donc à l'aide de Git pour le contrôle de version. Je clone le nu-repo sur tous les ordinateurs, et quand j'ai fini mes modifications sur l'un d'eux, je m'engage et pousser les modifications de la nue-repo. De ce que j'ai lu, le dépôt nu ne dispose PAS d'un "arbre de travail", donc si je clone le nu-repo, je n'aurai pas un "arbre de travail".

Je suppose que l'arbre de travail stocke l'information de validation, branches, etc. à partir du projet. Qui n'apparaît pas dans la bare des pensions. Il semble donc préférable pour moi de "pousser" les commits le repo avec l'arbre de travail.

Alors, pourquoi devrais-je utiliser le dépôt nu et pourquoi pas? Quelle est la différence? Ce ne serait pas bénéfique à plus de personnes de travailler sur un projet, je suppose.

Quelles sont vos méthodes pour ce genre de travail? Des Suggestions?

109voto

Derek Mahar Points 7125

Autre différence entre les nu et non nu dépôt est un dépôt nu n'ont pas de défaut à distance de l'origine du référentiel:

derek@derek-OptiPlex-960:~/Projects$ git clone --bare test bare
Initialized empty Git repository in /home/derek/Projects/bare/
derek@derek-OptiPlex-960:~/Projects$ cd bare
derek@derek-OptiPlex-960:~/Projects/bare$ git branch -a
* master
derek@derek-OptiPlex-960:~/Projects/bare$ cd ..
derek@derek-OptiPlex-960:~/Projects$ git clone test non-bare
Initialized empty Git repository in /home/derek/Projects/non-bare/.git/
cd nonderek@derek-OptiPlex-960:~/Projects$ cd non-bare
derek@derek-OptiPlex-960:~/Projects/non-bare$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

À partir de la page de manuel pour git clone --bare:

Aussi la direction de la tête à la distance sont copiés directement à la correspondante de locales, les chefs de direction, sans cartographie à refs/remotes/origin/. Lorsque cette option est utilisée, ni à distance de suivi des succursales, ni la liés à des variables de configuration sont créée.

Sans doute, lorsqu'il crée un dépôt nu, Git suppose que le dépôt nu servira à l'origine de référentiel pour plusieurs utilisateurs distants, afin de ne pas créer de distance par défaut d'origine. Ce que cela signifie, c'est que de base git pull et git push opérations ne fonctionne pas depuis Git suppose que sans un espace de travail, vous n'avez pas l'intention de commettre l'un quelconque des changements pour le dépôt nu:

derek@derek-OptiPlex-960:~/Projects/bare$ git push
fatal: No destination configured to push to.
derek@derek-OptiPlex-960:~/Projects/bare$ git pull
fatal: /usr/lib/git-core/git-pull cannot be used without a working tree.
derek@derek-OptiPlex-960:~/Projects/bare$ 

77voto

Derek Mahar Points 7125

La distinction entre un nu et non nu dépôt Git est artificiel et trompeur depuis un espace de travail ne fait pas partie du référentiel et d'un référentiel ne nécessite pas d'espace de travail. Strictement parlant, un dépôt Git comprend les objets qui décrivent l'état du référentiel. Ces objets peuvent exister dans n'importe quel répertoire, mais existent généralement dans l' .git répertoire dans le répertoire de niveau supérieur de l'espace de travail. L'espace de travail est une arborescence qui représente un engagement dans le référentiel, mais il peut exister dans n'importe quel répertoire ou pas du tout. La variable d'environnement $GIT_DIR liens un espace de travail pour le référentiel à partir duquel il provient.

Commandes Git git clone et git init les deux ont des options --bare qui créent des dépôts sans un premier espace de travail. Il est malheureux que Git regroupe les deux distincts, mais liés à des concepts de l'espace de travail et référentiel, puis utilise le terme ambigu, nu pour séparer les deux idées.

21voto

mipadi Points 135410

Un non-dépôt nu a simplement un extrait arbre de travail. L'arbre de travail ne permet pas de stocker toutes les informations concernant l'état du référentiel (branches, tags, etc.); plutôt, l'arbre de travail est juste une représentation du réel fichiers dans le dépôt, qui vous permet de travailler sur (modifier, etc.) les fichiers.

19voto

sehe Points 123151

Un dépôt nu a l'avantage de

  • réduction de l'utilisation du disque
  • moins de problèmes liés à la distance push (car aucun arbre de travail est-il à sortir de synchronisation ou d'avoir des conflits de modifications)

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