2016-12-03 6 views
2

gitでトラッキングを開始したいファイルが約30個あります。*.ipynbgitで元の作成時刻を保存するにはどうすればいいですか?

できるだけ多くのメタデータを保存したいとします。例えば、 元のタイムスタンプをgitに記録するにはどうすればよいですか?

このタイムスタンプ(実際には、ファイルのmtime)は、どの実験方法がどのような順序で試されたか(したがって、より有用である可能性が高い)を調べる方法です。したがって、元のタイムスタンプでファイルを並べ替えることができます。

PS。この文脈では、ファイルmtimeは、実際にはgit ctimeになります。 :-)

+1

MTIME=$(git log --pretty=format:%ad --date=format:%Y%m%d%H%M $COMMIT) 

3チェックアウトしたファイルのmtimeを変更あなたがしたいことを行うチェックアウトフック。 – jthill

+0

Unixファイルシステムはファイル作成時間を保存しないことに注意してください。 –

+0

@PatrykObaraが示唆しているように、コミットされている変更を検査し、mtimeを 'notes'で追加/更新するための事前コミットフックを提案します。次に、@jthillによって提案された事後チェックアウトフックで 'touch -d ...'を使用してください。 – user3159253

答えて

2

デフォルトでは、gitはファイルモードのみを保存しますが、テキストデータを好きなオブジェクトに添付することができます。この機能は「メモ」と呼ばれます。あなたはどのオブジェクト(blobを含む)にもノートを添付することができますが、git logを使ってノートの内容を簡単に見ることができるように、あなたのファイルをコミットするために添付することが最善の方法です。

$ git notes add <hash> 

に関するすべてのオプションを読み取るためのマニュアルページを参照してください:)

+0

メモはファイルではなくコミットオブジェクトに添付されていますか? – sds

+0

このアプローチは 'AuthorDate'よりどのように優れていますか? – sds

1

方法

最初のAuthorDateコミットとして、私は、タイムスタンプを保存することができます。 ファイルが*.ipynbノートブックなので、彼らはどのMakefileで言及するつもりされていない、と私は一度だけそれをしたい、最初のチェックインで、そうWhat's the equivalent of use-commit-times for git?で引用Linus's vehement objectionいかなる形で適用されませんです。

ストア

1 - 上で動作するファイルのリストを取得:

LEGACY_IPYNB=$(git ls-files --others --exclude-standard | grep ipynb) 

2からgit add $LEGACY_IPYNBを使用してファイルを追加します。

3 - (YUKしかし、作者時間は、あたりはをコミットファイルあたりではありませんので、私は単一のコミットを行うことはできません!)個別のファイルをコミット:

for f in $LEGACY_IPYNB; do 
    git commit --date=$(stat -f "%Sm" -t "%FT%T" $f) \ 
     --author="the actual author" -m 'initial commit' $f 
done 

を回復1 - 最初のコミットID(How to reference the initial commit?)を抽出します。

# FIXME: will break if `$f` has been since renamed! 
COMMIT=$(git rev-list --max-parents=0 HEAD -- $f) 

2 - extrac最初の作者時間T: - :あなたは `Gitのcheckout`は余分な何かを行う、一連のタイムスタンプのように、`ポストを書きたい場合は

touch -m -t $MTIME $f 
関連する問題