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]"
その他は(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
--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
に直接供給されることを示しています。 strftime
( here または 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'"
git log
がYYYY-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'
フィールドの切り捨てオプションを使用して、非常に多くの%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>'
私はこれが元の投稿に関して少し循環的であることに気づきましたが、他の人が私と同じ検索パラメータでここに到着した場合のために残しておきます。
私は同じことを必要としていましたが、私にとっては次のことがうまくいきました。
git log -n 1 --pretty='format:%cd' --date=format:'%Y-%m-%d %H:%M:%S'
--date=format
は、--pretty
が何を印刷するかを指示する日付出力をフォーマットします。
「date=iso
」形式に注意してください:exactlyISO 8601 ではありません。
Git 2.2.0の Beat Bolli(bbolli
) からcommit " 466fb67 "を参照(2014年11月)
Gitの「ISO」日付形式は、わずかな違いのために実際にはISO 8601標準に準拠しておらず、ISO 8601のみのパーサーでは解析できません。 XMLツールチェーンのもの。
「
--date=iso
」からの出力は、次の方法でISO 8601から逸脱しています。
T
日付/時刻区切り文字の代わりにスペース- 時間とタイムゾーンの間のスペース
- 時間帯の時間と分の間にコロンはありません
コミッターと著者の日付を表示するための厳密なISO 8601日付形式を追加します。
「%aI
」および「%cI
」フォーマット指定子を使用し、「--date=iso-strict
」または「--date=iso8601-strict
」日付フォーマット名を追加します。
議論については this thread をご覧ください。
date -d @$(git log -n1 --format="%at") +%Y%m%d%H%M
ユースケースに関係する場合、これはローカルタイムゾーンに変換されることに注意してください。
フォーマットオプション%ai
は、私が欲しかったものです。
%ai
:著者の日付、ISO 8601のような形式
--format="%ai"
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]"
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
特別な形式の日付が必要です。
Git 2.21(2019年第1四半期)では、新しい日付形式「--date=human
」により、出力がどこまで変化するかが変わります現在の時刻が導入されてからの時刻です。
「--date=auto
」を使用して、出力がポケットベルまたは端末に送信されるときにこの新しい形式を使用できます。それ以外の場合はデフォルト形式を使用できます。
commit 110a6a1 、 commit b841d4f (2019年1月29日)、および commit 038a878 、 commit 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
」コマンドは人間が判読できる形式で表示されます。