web-dev-qa-db-ja.com

Gitログの日付形式を変更する方法

Git内で最後のコミットを表示しようとしていますが、特別な形式の日付が必要です。

ログプリティ形式%ad--date形式を尊重しますが、見つけることができる--date形式は「短い」だけです。私は他の人、そして私が次のようなカスタムのものを作成できるかどうかを知りたいです。

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

その他は(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).

カスタム形式を作成するために私が知っている組み込みの方法はありませんが、いくつかのシェルマジックを実行できます。

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

ここの最初のステップでは、ミリ秒のタイムスタンプを取得します。 2番目の行を変更して、必要に応じてそのタイムスタンプをフォーマットできます。この例では、--date=localに似たものが表示され、日が埋め込まれています。


これを毎回入力せずに永続的な効果が必要な場合は、試してください

git config log.date iso 

または、このアカウントですべてのgitの使用に影響を与えるため

git config --global log.date iso
151
dmedvinsky

--date=(relative|local|default|iso|iso-strict|rfc|short|raw)に加えて、他の人が述べたように、カスタムログ日付形式を使用することもできます

--date=format:'%Y-%m-%d %H:%M:%S'

これは2016-01-13 11:32:13のようなものを出力します。

注:以下にリンクされているコミットを見ると、少なくとも必要になると思います Git v2.6.0-rc0 これが機能するために。

完全なコマンドでは、次のようになります。

git config --global alias.lg "log --graph --decorate 
-30 --all --date-order --date=format:'%Y-%m-%d %H:%M:%S' 
--pretty=format:'%C(cyan)%h%Creset %C(black bold)%ad%Creset%C(auto)%d %s'" 

私はどこにもドキュメントでこれを見つけることができませんでした(誰かがそれを見つける場所を知っているなら、コメントしてください)ので、私は元々試行錯誤によってプレースホルダーを見つけました。

これに関するドキュメントの検索で、 Git自体へのコミット が見つかりました。これは、フォーマットがstrftimeに直接供給されることを示しています。 strftimehere または here )を検索すると、見つかったプレースホルダーがリストされているプレースホルダーと一致します。

プレースホルダーは次のとおりです。

%a      Abbreviated weekday name
%A      Full weekday name
%b      Abbreviated month name
%B      Full month name
%c      Date and time representation appropriate for locale
%d      Day of month as decimal number (01 – 31)
%H      Hour in 24-hour format (00 – 23)
%I      Hour in 12-hour format (01 – 12)
%j      Day of year as decimal number (001 – 366)
%m      Month as decimal number (01 – 12)
%M      Minute as decimal number (00 – 59)
%p      Current locale's A.M./P.M. indicator for 12-hour clock
%S      Second as decimal number (00 – 59)
%U      Week of year as decimal number, with Sunday as first day of week (00 – 53)
%w      Weekday as decimal number (0 – 6; Sunday is 0)
%W      Week of year as decimal number, with Monday as first day of week (00 – 53)
%x      Date representation for current locale
%X      Time representation for current locale
%y      Year without century, as decimal number (00 – 99)
%Y      Year with century, as decimal number
%z, %Z  Either the time-zone name or time zone abbreviation, depending on registry settings
%%      Percent sign

完全なコマンドでは、次のようになります

git config --global alias.lg "log --graph --decorate -30 --all --date-order --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%C(cyan)%h%Creset %C(black bold)%ad%Creset%C(auto)%d %s'" 
148
Ben Allred

git logYYYY-MM-DD形式で日付を出力する方法を探していた後、lessで機能する方法で、次の形式を思いつきました。

%ad%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08

スイッチ--date=isoとともに。

これにより、日付がISO形式(長い形式)で出力され、14文字のバックスペース文字(0x08)が出力されます。これにより、私の端末では、YYYY-MM-DD部分以降のすべてが事実上削除されます。例えば:

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

これは次のようなものを与えます:

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

私がやったのは、上記の形式にいくつかの調整を加えたlというエイリアスを作成することでした。コミットグラフが左側に表示され、次にコミットのハッシュが表示され、その後に日付、短縮名、参照名、件名が続きます。エイリアスは次のとおりです(〜/ .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'
36
Bruno Reis

フィールドの切り捨てオプションを使用して、非常に多くの%x08文字を避けることができます。例えば:

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

以下と同等です:

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>'

目にはかなり簡単です。

さらに良いことに、この特定の例では、%cdを使用すると--date=<format>が優先されるため、YYYY-MM-DDが必要な場合は、これを実行して%<および%x08完全に:

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

私はこれが元の投稿に関して少し循環的であることに気づきましたが、他の人が私と同じ検索パラメータでここに到着した場合のために残しておきます。

24
dvhart

私は同じことを必要としていましたが、私にとっては次のことがうまくいきました。

git log -n 1 --pretty='format:%cd' --date=format:'%Y-%m-%d %H:%M:%S'

--date=formatは、--prettyが何を印刷するかを指示する日付出力をフォーマットします。

19
lac_dev

date=iso」形式に注意してください:exactlyISO 8601 ではありません。
Git 2.2.0の Beat Bolli(bbolli からcommit " 466fb67 "を参照(2014年11月)

pretty:厳密なISO 8601日付形式を提供します

Gitの「ISO」日付形式は、わずかな違いのために実際にはISO 8601標準に準拠しておらず、ISO 8601のみのパーサーでは解析できません。 XMLツールチェーンのもの。

--date=iso」からの出力は、次の方法でISO 8601から逸脱しています。

  • T日付/時刻区切り文字の代わりにスペース
  • 時間とタイムゾーンの間のスペース
  • 時間帯の時間と分の間にコロンはありません

コミッターと著者の日付を表示するための厳密なISO 8601日付形式を追加します。
%aI」および「%cI」フォーマット指定子を使用し、「--date=iso-strict」または「--date=iso8601-strict」日付フォーマット名を追加します。

議論については this thread をご覧ください。

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

ユースケースに関係する場合、これはローカルタイムゾーンに変換されることに注意してください。

11
Cheetah

フォーマットオプション%aiは、私が欲しかったものです。

%ai:著者の日付、ISO 8601のような形式

--format="%ai"
5
ThorSummoner
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]"
3
webb

Bashとdateコマンドを使用して、ISOのような形式から必要な形式に変換します。 org-mode 日付形式(およびリスト項目)が必要だったので、これを行いました:

echo + [$(date -d "$(git log --pretty=format:%ai -1)" +"%Y-%m-%d %a %H:%M")] \
    $(git log --pretty=format:"%h %s" --abbrev=12 -1)

そして結果は例えば:

+ [2015-09-13 Sun 22:44] 2b0ad02e6cec Merge pull request #72 from 3b/bug-1474631
2
Liam

特別な形式の日付が必要です。

Git 2.21(2019年第1四半期)では、新しい日付形式「--date=human」により、出力がどこまで変化するかが変わります現在の時刻が導入されてからの時刻です

--date=auto」を使用して、出力がポケットベルまたは端末に送信されるときにこの新しい形式を使用できます。それ以外の場合はデフォルト形式を使用できます。

commit 110a6a1commit b841d4f (2019年1月29日)、および commit 038a878commit 2fd7c22 (2019年1月21日)を参照してください)by Stephen P. Smith( ``)
Linus Torvalds(torvalds による commit acdd377 (2019年1月18日)を参照してください。
浜野潤夫-gitster- in combe ecbe1be 、2019年2月7日)

「人間」の日付形式のドキュメントを追加する

他のコンテキストで日付を記述する方法と同様の形式で日付と時刻の情報を表示します。
年が指定されていない場合、読者は与えられた日付が現在の年であると推測します

冗長な情報を表示しないことにより、読者は異なる情報に集中します
パッチは、コマンドが実行された時点でgitコマンドを実行しているマシンの日付から推測された情報に基づいて、相対的な日付を報告します。

この形式は、推測された情報をドロップすることで人間にとってより便利ですが、実際に人間にするものはありません。
'relative'日付形式がまだ実装されていない場合、 'relative'を使用することが適切でした。

human日付形式テストを追加します。

humanを使用する場合、参照日付とローカルコンピューターの日付の時間差に応じて、いくつかのフィールドが抑制されます。

  • 差が1年未満の場合、年フィールドは抑制されます。
  • 時間が1日未満の場合;月と年は抑制されます。
check_date_format_human 18000       "5 hours ago"       #  5 hours ago
check_date_format_human 432000      "Tue Aug 25 19:20"  #  5 days ago
check_date_format_human 1728000     "Mon Aug 10 19:20"  #  3 weeks ago
check_date_format_human 13000000    "Thu Apr 2 08:13"   #  5 months ago
check_date_format_human 31449600    "Aug 31 2008"       # 12 months ago
check_date_format_human 37500000    "Jun 22 2008"       #  1 year, 2 months ago
check_date_format_human 55188000    "Dec 1 2007"        #  1 year, 9 months ago
check_date_format_human 630000000   "Sep 13 1989"       # 20 years ago

##提案された「auto」モードを「auto:」に置き換えます

human」形式の追加に加えて、パッチはautoキーワードを追加しました。これは、人間の形式を指定する代替方法として構成ファイルで使用できます。 「auto」を削除すると、「human」形式のインターフェイスがクリーンアップされます。

auto:foo構文を使用してページャーが使用されている場合、モード「foo」を指定する機能が追加されました。
したがって、ページャーを使用している場合、 'auto:human'日付モードはデフォルトでhumanになります。
だからできること:

git config --add log.date auto:human

また、スクリプトを作成していない限り、「git log」コマンドは人間が判読できる形式で表示されます。

2
VonC