121 votes

Comment puis-je obtenir la diff entre toutes les validations qui ont eu lieu entre deux dates avec Git ?

Ou juste toutes les validations qui ont eu lieu entre deux dates ? Dans SVN, vous pourriez faire quelque chose comme

pour le faire ! Je n’arrive pas à trouver un Git équivalent à cela.

Plus précisément, je cherche à écrire un script pour envoyer des courriels quotidiens dont le code ce jour-là, accomplissait et par l’OMS.

167voto

seth Points 18409

Vous pouvez utiliser``

Il faut aussi un `` argument.

Docs

65voto

Weidenrinde Points 787

Les suggestions précédentes ont quelques inconvénients. En fait, je cherchais quelque chose d'équivalent à cvs diff -D"1 day ago" -D"2010-02-29 11:11". Lors de la collecte d'informations de plus en plus, j'ai trouvé une solution.

Choses que j'ai essayé:

  • git whatchanged --since="1 day ago" -p d' ici

    Mais cela donne un diff pour chaque commit, même si il y a de multiples s'engage dans un seul fichier. Je sais que "date" est un peu un concept lâche dans git, je pensais qu'il devait y avoir un moyen de le faire.

  • git diff 'master@{1 day ago}..master donne un avertissement warning: Log for 'master' only goes back to Tue, 16 Mar 2010 14:17:32 +0100. et ne montre pas toutes les différences.

  • git format-patch --since=yesterday --stdout ne donne rien pour moi.

  • revs=$(git log --pretty="format:%H" --since="1 day ago");git diff $(echo "$revs"|tail -n1) $(echo "$revs"|head -n1) fonctionne en quelque sorte, mais semble compliquée et ne pas le limiter à la branche courante.

Enfin:

Curieusement, git-cvsserver ne prend pas en charge "cvs diff -D" (sans qu'il est documenté quelque part).

24voto

Charles Bailey Points 244082

"date" est un peu un concept lâche dans git. Un commit auront un auteur date qui peut être un certain temps dans le passé avant que quelqu'un tire/engage les engager dans leur référentiel, aussi la validation peut être relocalisée et mis à jour pour être au top de façon apparemment plus récents s'engager.

Un commit a aussi un commit date de mise à jour si un commit est relocalisée ou modifié de quelque façon. Ces révisions sont plus susceptibles d'être dans une sorte d'ordre chronologique, mais vous êtes toujours à la merci de la committer avoir le bon temps de jeu sur son ordinateur et même, un non modifié commettre pouvez vous asseoir sur une branche, sur un dépôt distant indéfiniment avant de les fusionner dans la branche master du dépôt central.

Ce qui est probablement le plus utile pour vos besoins est le reflog date du dépôt en question. Si vous avez par branche reflogs activé (reportez - git config core.logAllRefUpdates), alors vous pouvez utiliser l' ref@{date} de la syntaxe pour faire référence à l'emplacement d'une branche a été à un moment donné.

E. g.

git log -p master@{2009-07-01}..master@{now}

Vous pouvez également utiliser 'floue' des descriptions telles que:

git log -p "master@{1 month ago}..master@{yesterday}"

Ces commandes montrera tous les commits qui ont "apparu" dans la branche du dépôt, indépendamment de la façon dont "vieux", ils sont en fait en fonction de leur auteur et de commettre des dates.

Notez que la direction de la reflog est spécifique à un référentiel, donc, si vous exécutez la commande log sur un clone, et que vous ne tirez pas pour, disons, un mois, puis tirez sur tous les changements pour le dernier mois à la fois, puis tous les mois dernier, des changements apparaissent dans un @{1 hour ago}..@{now} de la gamme. Si vous êtes en mesure d'exécuter la commande log sur le "central" repostory que les gens poussent, alors il peut faire ce que vous voulez.

17voto

AA. Points 1584
 git diff --stat @{2013-11-01}..@{2013-11-30}
 

ou

 git diff --stat @{2.weeks.ago}..@{last.week}
 

5voto

Jakub Narębski Points 87537

Peut-être

est ce que vous voulez (avec ou sans '--stdout') ?

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