Je suis nouveau dans Git et j'utilise l'extension Git. J'aimerais savoir si, lorsque je livre le répertoire, ces fichiers sont automatiquement mis à disposition ou s'ils sont livrés sans mise à disposition ? Puis-je commiter des fichiers sans staging ?
Réponses
Trop de publicités?Il convient de mentionner ici que toutes ces méthodes utilisent un index, une zone de transit ou un cache.
Quand Git fait un nouveau commit, il le fait en utilisant ce qui se trouve dans "l'index". Comme la phrase l'indice implique, il y a une chose unique, spéciale, distinguée : le site par opposition à l'indice un l'index. Mais en fait, Git peut utiliser autre l'index. Nous devons savoir ce que "l'indice" es et ce que cela signifie d'être le site par rapport à un autre indice.
La version courte est que l'index est ce que Git utilise pour construire le prochain commit. Nous commençons avec ce qui se trouve dans este l'engagement, c'est-à-dire l'engagement actuel ou le HEAD
commettre. Vous exécutez git checkout master
o git checkout branch
ou autre, et Git remplit votre arbre de travail avec un tas de fichiers. Il met le même dans l'index (unique, spécial, distingué), également appelé zone de transit. Cela signifie que l'index/zone de transit est rempli de nombreux fichiers : la plupart du temps, ce sont les mêmes que dans votre arbre de travail, où vous travaillez. L'exception est que certains fichiers de l'arbre de travail peuvent être sans trace .
Un site sans trace est un fichier qui n'est pas dans l'index. C'est aussi simple que cela : tout fichier qui est no dans l'index est non suivi ; tout fichier qui es dans l'indice est suivi. Ceux qui sont dans l'indice sont au départ les mêmes que ceux que vous git checkout
-ed, que git checkout
mettre dans votre arbre de travail.
Vous faites ensuite un tas de changements dans un tas de fichiers. Si vous exécutez git commit
En ce moment, cependant, l'index / la zone de mise en scène a toujours l'original git checkout
et non les versions de l'arbre de travail modifié. Vous devez donc git add
les fichiers modifiés pour les copier dans l'index.
C'est un peu fastidieux, donc Git a git add -u
et aussi git commit -a
. Mais les deux ne font que regarder ce qui est dans l'index en ce moment, et copient la nouvelle version de l'arbre de travail dans l'index. Donc git commit -a -m "commit message"
n'ajoute pas les fichiers qui sont dans l'arbre de travail mais sont no dans l'index, c'est-à-dire les fichiers qui sont actuellement non suivis. C'est la même chose que git add -u
: seulement traqué les fichiers sont mis à jour.
C'est là que ça se complique un peu.
En plus de ce qui précède, git commit
peut prendre des noms de chemin comme arguments :
git commit -m "some message" file1 file2
par exemple. Mais cela implique la --only
c'est-à-dire, commettre uniquement les changements dans file1
y file2
. Vous pouvez également exécuter :
git commit -m "some message" --include file1 file2
Cela remplace le --only
.
La façon dont tout cela fonctionne est que Git peut utiliser une différents au lieu de l'indice standard. Lorsque vous utilisez --only
ce que fait Git, c'est de construire un nouvel index temporaire à partir de la base de données de la HEAD
commettre. Ensuite, dans cet index temporaire, Git copie les fichiers spécifiés depuis l'arbre de travail, en remplaçant les anciennes versions, ou en ajoutant de nouveaux fichiers. Ensuite, Git fait un commit à partir de cet index temporaire : le nouveau commit contient tous les mêmes fichiers que l'index temporaire. HEAD
sauf pour ce qu'il a ajouté en raison de --only file1 file2
.
Lorsque vous utilisez --include
Git crée son index temporaire en copiant l'index actuel, plutôt qu'en extrayant HEAD
encore. Donc maintenant, quoi que vous ayez git add
-jusqu'à présent est aussi dans l'index temporaire. Ensuite, Git ajoute les fichiers spécifiés, et fait le nouveau commit.
Dans tous les cas, une fois que Git a effectué le nouveau commit, il doit corriger le fichier réel aussi, parce que maintenant vous avez engagé le dernier file1
y file2
(et peut-être d'autres mises à jour si vous avez utilisé --include
). Si vous avez utilisé --include
l'index temporaire devient simplement l'index réel.
Si vous avez utilisé --only
il s'agit du cas le plus compliqué. Ici, Git copie également les fichiers ajoutés dans l'index réel, à ce stade, mais laisse l'index réel intact. De cette façon, tout ce que vous avez mis en scène avant est toujours mis en scène. Le nouveau commit contient tout ce qui se trouvait dans le fichier HEAD
commettre (via l'index temporaire), sauf pour les fichiers spécifiés (qui ont été git add
-dans l'index temporaire). Et, ce que vous avez spécifiquement engagé à l'instant est également git add
- à la réel maintenant, comme si vous aviez exécuté git add
sur ces fichiers.