179 votes

Quelle est la différence entre « git init » et « git init--nu » ?

Quelle est la différence entre git init et git init --bare? J'ai trouvé que beaucoup de blog exige --bare de leur serveur Git?

À partir de la page de man, il dit:

--bare

Créer un dépôt nu. Si GIT_DIR de l'environnement n'est pas définie, elle est définie sur le répertoire de travail courant

Mais qu'est-ce que ça veut dire? Est-il nécessaire de disposer --bare pour le serveur Git d'installation?

155voto

Adam Dymitruk Points 34999

On crée un espace de stockage avec un répertoire de travail de sorte que vous pouvez réellement travail (git clone). Après la création, vous verrez que le répertoire contient un .git dossier où l'histoire et de tout le git de la plomberie va. Vous travaillez au niveau où la .git dossier.

L'autre crée un dépôt sans un répertoire de travail (git clone --bare). Vous n'obtenez pas un répertoire où vous pouvez travailler. Tout dans le répertoire est maintenant ce qui était contenu dans le cas ci-dessus.

Le besoin de repos git sans un répertoire de travail est le fait que vous pouvez pousser les branches, et il n'est pas gérer ce que quelqu'un travaille sur. Vous pouvez toujours pousser dans un référentiel qui n'est pas nue, mais vous obtiendrez rejeté comme vous pouvez éventuellement déplacer une branche que quelqu'un travaille dans ce répertoire de travail.

Ainsi, dans un projet avec aucun dossier de travail, vous ne pouvez voir les objets que git stocke. Ils sont compressés et sérialisé et stockés dans le SHA1 (hash) de leur contenu. Afin d'obtenir un objet dans un dépôt nu, vous avez besoin d' git show , puis spécifiez le sha1 de l'objet que vous voulez voir. Vous ne verrez pas une structure comme ce que votre projet ressemble.

Nu les dépôts sont généralement centrale des dépôts où tout le monde passe leur travail. Il n'est pas nécessaire de manipuler le travail réel. C'est un moyen de synchroniser les efforts entre plusieurs personnes. Vous ne serez pas en mesure de voir directement les fichiers de votre projet.

Vous ne pouvez pas avoir la nécessité pour tout nu référentiels si vous êtes le seul à travailler sur le projet, ou que vous ne voulez pas/besoin d'un "logiquement centrale" référentiel. On préférerait git pull de un les autres dépôts dans ce cas. Cela évite les objections que git a quand pousser à non à nu des dépôts.

118voto

duncan Points 2298

Réponse courte

Un dépôt nu est un dépôt git sans une copie de travail, par conséquent, le contenu de .git est de haut niveau pour ce répertoire.

L'utilisation d'un non-dépôt nu de travailler localement et un dépôt nu comme un serveur central/hub de partager vos modifications avec d'autres personnes. Par exemple, lorsque vous créez un espace de stockage sur github.com, il est créé comme un dépôt nu.

Donc, dans votre ordinateur:

git init
touch README
git add README
git commit -m "initial commit"

sur le serveur:

cd /srv/git/project
git init --bare

Puis sur le client, vous poussez:

git push username@server:/srv/git/project master

Vous pouvez ensuite enregistrer vous-même la saisie de données par l'ajout d'une télécommande.

Le référentiel sur le côté serveur va s'engage via tirer et pousser, et non par vous, l'édition de fichiers, puis s'engager dans la machine serveur, donc c'est un dépôt nu.

Détails

Vous pouvez pousser un référentiel qui n'est pas un dépôt nu, et git trouverez qu'il ya un .le dépôt git de là, mais comme la plupart des "hub" référentiels n'ont pas besoin d'une copie de travail, il est normal d'utiliser un dépôt nu pour elle et a recommandé qu'il n'y a aucun point en ayant une copie de travail dans ce type de dépôts.

Toutefois, si vous pousser à non dépôt nu, vous effectuez la copie de travail incompatibles, et git va vous avertir:

remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error: 
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error: 
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.

Vous pouvez ignorer cet avertissement. Mais la configuration recommandée est: utilisez un non-dépôt nu de travailler localement et un dépôt nu comme un hub ou d'un serveur central à pousser et à tirer.

Si vous voulez partager travailler directement avec les autres développeurs de la copie de travail, vous pouvez tirer les uns des autres référentiels au lieu de pousser.

71voto

Salvador Dali Points 11667

Quand j'ai lu cette question il y a quelques temps, tout était confus pour moi. J'ai juste commencé à l'utilisation de git et il y a ces copies de travail (qui ne disait rien à l'époque). Je vais essayer de vous l'expliquer du point de vue de l'homme, qui vient de commencer le git avec aucune idée au sujet de la terminologie.

Un bel exemple de la différence peut être décrit de la manière suivante:

--bare vous donne juste un lieu de stockage (vous ne pouvez pas développer là-bas). Sans --bare il vous donne la possibilité de s'y développer (et d'avoir un lieu de stockage).

git init crée un dépôt git à partir de votre répertoire courant. Il ajoute .git dossier à l'intérieur et le rend possible pour commencer votre historique de révision.

git init --bare crée également un référentiel, mais il n'a pas le répertoire de travail. Cela signifie que vous ne pouvez pas modifier les fichiers, valider vos modifications, ajouter de nouveaux fichiers dans ce référentiel.

Lors de l' --bare peut-il être utile? Vous et quelques autres gars travaillent sur le projet et l'utilisation de git . Vous a accueilli le projet sur un serveur (amazon ec2). Chacun de vous avez votre propre ordinateur et vous pousser votre code sur ec2. Aucun de vous réellement développer quoi que ce soit sur ec2 (vous utilisez vos machines) - vous venez de pousser votre code. Si votre ec2 est qu'un espace de stockage pour tous vos code et devraient être créés en tant que --bare et de toutes vos machines sans --bare (plus probablement juste un, et d'autres seront tout simplement de cloner tout). Le flux de travail ressemble à ceci:

enter image description here

15voto

Sandro Munda Points 12808

Un dépôt Git de valeur par défaut suppose que vous utiliserez dans votre répertoire de travail. En règle générale, lorsque vous êtes sur un serveur, vous n’avez pas besoin d’avoir un répertoire de travail. Juste le référentiel. Dans ce cas, vous devez utiliser le `` option.

12voto

Andrew Points 1631

Un non-dépôt nu est la valeur par défaut. C'est ce qui est créé lorsque vous exécutez git init, ou ce que vous obtenez lorsque vous clone (sans l' bare option) à partir d'un serveur.

Lorsque vous travaillez avec un référentiel comme cela, vous pouvez consulter et modifier tous les fichiers qui sont dans le référentiel. Lorsque vous interagissez avec le référentiel - par exemple en faisant un changement de Git stocke vos modifications dans un répertoire caché appelé .git.

Lorsque vous avez un serveur git il n'est pas nécessaire pour qu'il y ait des copies de travail de ces fichiers. Tous vous avez besoin est le Git de données qui est stocké dans .git. Un dépôt nu est exactement l' .git annuaire, sans un espace de travail en vue de modifier et de valider des fichiers.

Lorsque vous clonez à partir d'un serveur Git a toutes les informations dont il a besoin dans l' .git directory pour créer votre copie de travail.

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