186 votes

Formats de date du journal Git

J'essaie d'afficher le dernier commit dans git. J'ai besoin de la date dans un format spécial cependant. Je sais que le format de journal% ad respecte le format --date, mais le seul format --date que je puisse trouver est court. Je veux connaître les autres, et si je peux en créer un personnalisé tel que:

 git -n 1 --date=**YYMMDDHHmm** --pretty=format:"Last committed item in this release was by %%an, %%aD, message: %%s(%%h)[%%d]"
 

196voto

dmedvinsky Points 3345

Les autres sont (de git help log ):

 --date=(relative|local|default|iso|rfc|short|raw)
  Only takes effect for dates shown in human-readable format,
  such as when using "--pretty".  log.date config variable
  sets a default value for log command's --date option.

--date=relative shows dates relative to the current time, e.g. "2 hours ago".

--date=local shows timestamps in user's local timezone.

--date=iso (or --date=iso8601) shows timestamps in ISO 8601 format.

--date=rfc (or --date=rfc2822) shows timestamps in RFC 2822 format,
  often found in E-mail messages.

--date=short shows only date but not time, in YYYY-MM-DD format.

--date=raw shows the date in the internal raw git format %s %z format.

--date=default shows timestamps in the original timezone
  (either committer's or author's).
 

Je ne connais aucun moyen intégré de créer un format personnalisé, mais vous pouvez utiliser un peu de magie.

 timestamp=`git log -n1 --format="%at"`
my_date=`perl -e "print scalar localtime ($timestamp)"`
git log -n1 --pretty=format:"Blah-blah $my_date"
 

La première étape ici vous donne un timestamp millis. Vous pouvez modifier la deuxième ligne pour formater cet horodatage comme vous le souhaitez. Cet exemple vous donne quelque chose de similaire à --date = local, avec une journée matelassée.

37voto

Bruno Reis Points 16132

Après un long moment à la recherche d'un moyen de récupérer git log de sortie de la date dans le format YYYY-MM-DD d'une manière qui permette de travailler en less,, je suis venu avec le format suivant: %ad%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08, avec le commutateur --date=iso.

Ce sera d'impression de la date au format ISO (longue), puis l'imprimer à 14 fois le caractère de retour arrière (0x08), qui, dans mon terminal, élimine efficacement tout ce qui est après le AAAA-MM-JJ partie. Par exemple:

git log --date=iso --pretty=format:'%ad%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%aN %s'

Cela donne quelque chose comme:

2013-05-24 bruno This is the message of the latest commit.
2013-05-22 bruno This is an older commit.
...

Ce que j'ai fait était de créer un alias nommé l avec quelques réglages sur le format ci-dessus. Il montre que la validation graphique vers la gauche, puis la validation de hachage de l', suivie de la date, les noms courts, la refnames et le sujet. L'alias est comme suit (dans ~/.gitconfig):

[alias]
        l = log --date-order --date=iso --graph --full-history --all --pretty=format:'%x08%x09%C(red)%h %C(cyan)%ad%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08 %C(bold blue)%aN%C(reset)%C(bold yellow)%d %C(reset)%s'

25voto

dvhart Points 71

Vous pouvez utiliser le champ de la troncature option pour éviter tout à fait aussi beaucoup d' %x08 caractères. Par exemple:

git log --pretty='format:%h %s%n\t%<(12,trunc)%ci%x08%x08, %an <%ae>'

est équivalent à:

git log --pretty='format:%h %s%n\t%ci%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08, %an <%ae>'

Et un peu plus facile sur les yeux.

Mieux encore, pour cet exemple particulier, à l'aide de %cd mettra à l'honneur l' --date=<format>, donc si vous souhaitez YYYY-MM-DD, vous pouvez le faire et éviter %< et %x08 entièrement:

git log --date=short --pretty='format:%h %s%n\t%cd, %an <%ae>'

EDIT: Viens de remarquer, c'était un peu circulaire par rapport à l'original post... mais je vais le laisser dans le cas où d'autres sont arrivés ici avec les mêmes paramètres de recherche que j'ai fait...

12voto

Cheetah Points 548
 date -d @$(git log -n1 --format="%at") +%Y%m%d%H%M
 

Notez que cela convertira votre fuseau horaire local, au cas où cela serait important pour votre cas d'utilisation.

2voto

Webb Phillips Points 113
git log -n1 --format="Last committed item in this release was by %an, `git log -n1 --format=%at | awk '{print strftime("%y%m%d%H%M",$1)}'`, message: %s (%h) [%d]"

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