Git commit ouvre un fichier texte vierge, pour quoi faire?

93

Dans tous les tutoriels Git que j'ai lus, ils disent que vous pouvez faire:

git init
git add .
git commit

Quand je fais cela, j'ouvre un gros fichier texte. Aucun des didacticiels ne semble aborder ce problème, donc je ne sais pas quoi faire avec le fichier ou quoi y mettre le cas échéant.

Aléatoire
la source

Réponses:

124

Vous êtes censé mettre le message de validation dans ce fichier texte, puis enregistrer et quitter.

Vous pouvez changer l'éditeur de texte par défaut utilisé par git avec cette commande:

git config --global core.editor "nano"

Vous devez remplacer nano par la commande qui ouvrirait normalement votre éditeur de texte.

vikhyat
la source
15
N'avez-vous pas besoin d'ajouter --globalpour changer la valeur par défaut?
Znarkus
4
@Znarkus bon point. Voir ici pour plus d'informations. Fondamentalement, la réponse donnée ne changerait que le paramètre du projet actuel, alors que le --globalmodifierait pour l'utilisateur actuel et le --systemchangerait pour tout le monde sur cet ordinateur.
Matt Fenwick
24
Bien que cette réponse contienne de bonnes informations, elle ne répond pas à la question réelle.
Adrian Schmidt
5
Je ne vois pas pourquoi cela a doublé les votes positifs comme certaines des réponses qui répondent réellement à la question. Ce n'est pas le cas.
Johan
2
@Johan, vous n'avez pas tort, mais étant tombé sur ça, j'ai trouvé cette réponse extrêmement utile. Alors je l'ai voté.
Danation
65

Comme mentionné par Ben Collins , sans l' -m "..."argument pour taper le commit en ligne (ce qui est généralement une mauvaise idée car cela vous encourage à être bref), ce "gros fichier texte" qui s'ouvre est une fenêtre dans laquelle taper le message de commit .

Il est généralement recommandé d'écrire un résumé dans la première ligne, de sauter une ligne, puis d'écrire des notes plus détaillées en dessous; cela aide les programmes qui font des choses comme envoyer par courrier électronique les messages de validation avec une ligne d'objet appropriée et la liste complète des modifications apportées au corps.

Au lieu de changer la EDITORvariable shell, vous pouvez également changer l'éditeur utilisé en ajoutant les lignes supplémentaires dans votre ~/.gitconfigfichier:

[core]
    editor = emacs
    excludesfile = /Users/will/.gitignore

Cette deuxième ligne n'a en fait rien à voir avec votre problème, mais je la trouve vraiment utile pour que je puisse remplir mon ~/.gitignorefichier avec tous ces types de fichiers dont je sais que je ne veux jamais, jamais, m'engager dans un référentiel.

Will Robertson
la source
36

Le fichier texte en cours d'ouverture est un résumé de l'opération de validation en cours. Le commit git vous dépose dans ce fichier afin que vous puissiez ajouter un message de commit en haut du fichier. Une fois que vous avez ajouté votre message, enregistrez et quittez ce fichier.

Il existe également un commutateur "-m msg" sur cette commande qui vous permet d'ajouter le message de validation sur la ligne de commande.

Lou
la source
Salut Lou, je suis aussi un débutant sur GIt. Je pense qu'après avoir existé ou écrit et existé le fichier texte, le git n'a pas réellement validé la mise en scène et le message de validation que je viens d'écrire. Alors, quelle est la signification d'ajouter le message à ce fichier texte si je ne peux pas faire le commit après l'écriture et le quitter. (veuillez me corriger si je me suis trompé, merci beaucoup)
SLN
@SLN Le scénario que vous décrivez n'est pas très clair. Je vais faire une supposition et suggérer que vous n'avez peut-être pas préparé de fichier pour la validation, donc votre tentative de validation n'a rien fait. Utilisez "git add" pour les fichiers de première étape que vous voulez valider, puis "git commit" pour effectuer le commit réel.
Lou
15

Si vous êtes sous Mac OS X et que vous utilisez BBEdit, vous pouvez le configurer comme éditeur de choix pour les messages de validation:

git config --global core.editor "bbedit -w"

Une fois l'édition terminée, enregistrez et fermez le fichier et git l'utilisera pour les commentaires.


la source
15

En supposant que votre éditeur utilise par défaut vi / vim, vous pouvez quitter l'éditeur de message de validation en tapant:

:x

qui enregistrera et quittera le fichier de message de validation. Ensuite, vous reviendrez à la section de commande git normale.

Plus de commandes vi:
http://www.lagmonster.org/docs/vi.html

MatthiasS
la source
9
Si vous êtes comme moi, vous étiez en mode insertion / remplacement (c'est-à-dire en tapant le message de validation). Si c'est le cas, vous devrez frapperesc pour passer en mode commande avant de taper :xpour enregistrer et quitter.
Martin Carney
1
En supposant bien sûr que son éditeur utilise par défaut vi / vim. Ce ne serait pas vrai pour tout le monde. Certainement pas pour cet utilisateur emacs;)
haziz
Cela m'a évité beaucoup de problèmes. Merci beaucoup
Danation
12

Comme tous l'ont dit, c'est là que vous ajoutez votre commentaire de commit - mais pour certains, cela peut encore être déroutant, surtout si vous n'avez pas configuré les paramètres de votre éditeur et que vous ne savez pas ce qu'est le VI : alors vous pourriez être sous le choc , parce que vous penserez que vous êtes toujours dans le GIT-Bash

Dans ce cas, vous êtes en fait dans un éditeur de texte avec des façons intéressantes de gérer les choses et cet ensemble de commandes peut vous aider afin que vous puissiez passer votre premier commit et ensuite configurer un éditeur que vous connaissez ou l'utiliser comme l'occasion d'apprendre à l'utiliser.

Stephen Bailey
la source
8
Je sais que finir en vi me choque toujours :)
Will Robertson
1
Les choses ont tellement plus de sens maintenant. +1
Matt Ellen
11

L' -moption de validation vous permet de saisir un message de validation sur la ligne de commande:

git commit -m "my first commit"
Greg Hewgill
la source
7

Lorsque vous créez un nouveau commit, git lance un éditeur de texte et y écrit des éléments.

En utilisant cet éditeur de texte, l'intention est que vous écriviez le message de validation qui sera associé à votre validation créée récemment.

Une fois que vous avez terminé, enregistrez et quittez l'éditeur de texte. Git utilisera ce que vous avez écrit comme message de validation.

Le message de validation a une structure particulière, décrite comme suit:

La première ligne du message de validation est utilisée comme en-tête (ou titre) du message. La longueur préférée de l'en-tête de validation est inférieure à 40 caractères, car c'est le nombre de caractères que github affiche sur l'onglet Commits d'un référentiel donné avant de le tronquer, ce que certaines personnes trouvent irritant.

Lors de la composition de l'en-tête, l'utilisation d'un verbe au présent en majuscule pour le premier mot est une pratique courante, mais pas du tout obligatoire.

Une nouvelle ligne délimite l'en-tête et le corps du message.

Le corps peut être ce que vous voulez. Un aperçu des changements introduits par votre commit est raisonnable. Certaines applications tierces utilisent des informations incluses dans le corps des messages de validation pour déclencher divers types de hooks (je pense à Gerrit et Pivotal Tracker, pour n'en nommer que deux).

Voici un exemple court et doux. Un début #indique un commentaire.

Gitignore index.pyc

Ignore gunicorn generated binary file
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch dev
# Your branch is ahead of 'origin/dev' by 10 commits.
#   (use "git push" to publish your local commits)
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   .gitignore
#

Ici un M. Torvalds se prononce sur ce qui fait un bon engagement.

Et ici Tpope fait de même.

Comme indiqué dans plusieurs autres réponses, changer l'éditeur par défaut est une ligne de commande unique sur la ligne de commande.

Pour ma préférence:

git config --global core.editor "vim"
non, merci
la source
2
cela devrait être la réponse acceptée pour la question.
mppfiles
6

Essayez Escape puis ZZ, une fois que vous avez terminé de taper votre message. Comme d'autres l'ont dit, lorsque vous exécutez cette commande de validation, elle exécute en fait un éditeur de texte dans lequel entrer le message. Dans mon cas (OS X), c'était VI, que j'ai compris après quelques fouilles. Dans ce cas, appuyez sur Echap pour passer en mode "commande" (par opposition au mode INSERT) et entrez ZZ. Je suis sûr qu'il y a d'autres façons d'accomplir la tâche, mais cela l'a fait pour moi. N'ayant jamais utilisé VI ou emacs, cela ne m'était pas évident et n'était mentionné dans aucun des guides pour débutants que j'utilisais. Espérons que cela aide.

TheGeoff
la source
4

La git commitcommande ouvrira l'éditeur spécifié dans leEDITOR variable d'environnement afin que vous puissiez entrer un commentaire de validation. Sur un système Linux ou BSD, cela devrait être vi par défaut, bien que n'importe quel éditeur devrait fonctionner.

Entrez simplement vos commentaires et enregistrez le fichier.

Ben Collins
la source
2

J'étais confus parce que j'essayais toujours d'entrer un nom de fichier après le: w dans VIM. Cela ne déclenche pas le commit. Au lieu de cela, j'ai continué à recevoir un message "Abandon de la validation en raison d'un message de validation vide". Ne mettez pas de nom de fichier après: w. : w enregistre le fichier dans .git / COMMIT_EDITMSG par défaut. Puis: q pour quitter pour terminer la validation. Vous pouvez voir les résultats avec git log.

user360221
la source
ou vous pouvez simplement utiliser: x pour enregistrer et quitter.
TJ Ellis
2

Maintenant que j'ai changé mon éditeur en emacs, tout fonctionne bien.

Mais avant de définir cela, "git commit -a" a ouvert gedit, mais s'est également immédiatement terminé par un "Aborting commit due to empty commit message.". L'enregistrement du fichier depuis gedit n'a eu aucun effet. La définition explicite de l'éditeur avec "git config --global core.editor" gedit "" a eu le même résultat.

Il n'y a rien de mal avec emacs, mais par curiosité, pourquoi cela ne fonctionne-t-il pas avec gedit, et y a-t-il un moyen de le faire fonctionner?

Merci.

Peter
la source
si gedit est déjà en cours d'exécution, faire "gedit file.txt" ouvrira le fichier dans la fenêtre existante et retournera immédiatement ... vous devriez poster ceci comme une question réelle, en particulier sur l'utilisation de gedit avec git.
araqnid
6
s'est heurté à cela aussi. vous pouvez le réparer en configurant gedit pour qu'il s'exécute en mode `` autonome '':git config --global core.editor "gedit -s"
brittohalloran
2

Pour ceux d'entre vous qui utilisent OS XI, cette commande fonctionne bien:
git config --global core.editor "open -t -W"

ce qui forcera git à ouvrir l'éditeur de texte par défaut (textedit dans mon cas) puis à attendre que vous quittiez l'application. Gardez à l'esprit que vous devez "Enregistrer" puis "Quitter" textedit avant que la validation ne soit effectuée. Il y a quelques autres commandes avec lesquelles vous pouvez jouer comme détaillé sur cette page:

Bibliothèque des développeurs Apple - Commande ouverte

Vous pouvez également essayer git config --global core.editor "open -e -W"si vous voulez que git ouvre toujours textedit quel que soit l'éditeur par défaut.

JiuJitsuCoder
la source
1

Ouais, assurez-vous d'avoir un ensemble d'éditeurs judicieux. Je ne sais pas ce que vous êtes l'éditeur par défaut, mais si, comme moi, il est nano (dira quelque part vers le haut après avoir tapé commit), il vous suffit de taper un commentaire, puis d'appuyer sur Ctrl-x pour terminer. Appuyez ensuite sur y, puis sur Entrée pour confirmer la validation.

De plus, si vous voulez voir une liste simple des fichiers, vous allez commettre plutôt qu'une énorme liste de différences avant d'essayer

git diff --name-only
Tom Martin
la source
1

Lorsque vous effectuez le contrôle des révisions, vous devez toujours expliquer les modifications que vous avez apportées. Habituellement, la première fois que vous avez un commentaire tel que "Initial Commit".

Cependant, à long terme, vous voulez faire un bon commentaire pour chaque commit. Vous voudrez quelque chose de la forme:

Ajout de la fonctionnalité expérimentale x.

X augmentera les performances de la fonction Y dans la condition Z. Si vous avez besoin de X, activez-la avec les commutateurs -x ou --feature-eks. Cela répond à la demande de fonctionnalité n ° 1138.

Flamme
la source
1

Étant nouveau sur Terminal également, "Escape and then ZZ" a fonctionné pour moi, j'ai ce problème depuis des mois et je n'ai pas pu trouver un moyen de le contourner.

Merci TheGeoff pour vos conseils simples!

Yarito
la source
0

Ce qui suit est probablement le moyen le plus simple de valider toutes les modifications:

git commit -a -m "Type your commit message here..."

Bien sûr, il existe des moyens beaucoup plus détaillés de s'engager, mais cela devrait vous aider à démarrer.

PHLAK
la source