ブランチ内のすべての変更を、特別なデプロイメントロジックを実装するアプリケーションによってさらに処理する必要があります。非常に少なくとも
私が取得する必要があるでしょう:git log - xml出力を取得する方法
- コミットSHA1
- コミット日付ごと
ため
- コミット著者
- コミットノート
も同様です。出力はXMLである必要があります。
そこにはJSON出力を作成するPerlスクリプトがありますが、私はXMLに固執したいと思います。
私は解析するawkスクリプトを書いた...
をかなり形式のオプションを試してみたが、変更のためのプレースホルダを見つけることができない、と
git log -10 --name-status --pretty=format:"<entry><author>%an</author><commit_date>%cd</commit_date><message_body>%N</message_body></entry>" -- databases/
を実行すると、ちょうどエントリ間の変更をダンプ出力するが、もっと「ネイティブ」なものを探したいと思う。そこには何かありますか?おそらく私は行方不明のオプションですか?
興味のある方は、ここに私が欲しいことをするawkスクリプトがあります。まだそれはMac上でgawkで実行する必要がありますが、Cygwinのawkでうまく動作するかどうか不明です。
# script to parse the output of git log --name-status
BEGIN{
RS="commit ";
FS="\n";
print "<log>";
}
NR>1{
StartComment=0;
CommentText = "";
CommitText = "";
AuthorText = "";
DateText = "";
ChangesText = "";
isLast = 0;
for(i = 1; i <= NF; i++)
{
if (i==1) {CommitText = $i;}
if (match($i,/^Author/)) {
#remove "author :"
split($i,author1,": ");
split(author1[2],author2," <")
AuthorText = author2[1];}
else if (match($i,/^Date/)) {StartComment=1; ln=i;
#remove "date :"
split($i,dt,": ");
DateText = dt[2];
#trim whitespaces
gsub(/^[ \t]+/,"",DateText);
}
else if (match($i,/^[A-Z]\s/)) {StartComment=0;
if(match($i,/\.sql$/)){
j = i+1
ch_path = substr($i,2)
gsub(/^[ \t]+/,"",ch_path);
unitChange = "\t\t\t<change>\n\t\t\t\t<ChangeType>"substr($i,1,1)"</ChangeType>\n\t\t\t\t<Path>"ch_path"</Path>\n\t\t\t</change>";
ChangesText = ChangesText""unitChange;
if (!match($(j),/^$/)){ChangesText = ChangesText"\n"}
}
}
else if (StartComment==1 && i>ln) { {CommentText=CommentText$i"\n"} }
}
print "\t<entry>";
print "\t\t<commit-sha1>"CommitText"</commit-sha1>";
print "\t\t<Author>"AuthorText"</Author>";
print "\t\t<CommitDate>"DateText"</CommitDate>";
print "\t\t<Changes>";
print ChangesText;
print "\t\t</Changes>";
print "\t</entry>";
}
END {
print "</log>"
}
おかげで、第二の符号化の問題を無視して、変更を含むXMLとして情報をコミットを取得する方法があります任意のネイティブgitコマンドから? – Mordechai
いいえ、とにかくGitのソースコードを変更することはありません。 NULの可能性を引き下げたいなら、 '--pretty = format:'形式のアイテム間で%x00を使うことができます。これを使って、%Nからのノートとログメッセージ(例えば、 1つの 'git log'コマンドで実行します。しかし100%確実にするためには、 'git log --no-walk --pretty = format:%N'を使って、例えば自分自身だけでメモを取得する必要があります。 –
torek
多くのアイテム*が*制限されている(作者名やコミッター名と日付に改行やNULはありません)、いくつかの別々の 'git log'ですべてを得ることができます。しかし、コンテンツへの生のアクセスのためには、 'git cat-file --batch-check'を調べるのがよいでしょう。サイズの後ろに生のバイトが続くので、コンテンツとして解釈するバイト数を知ることができます。 – torek