Skip to contentSkip to conversation

Git "Keeping Original Dates"

DISCUSSION Hector Santos 6 participants 9 messages Jun 5, 2017 – Jun 6, 2017

lore
Share & tools
lore
#0 lore raw

I'm implementing GIT. If there an option or compile/version that "keep" file timestamps?

Signature · 6 lines
Hector, Engineering & Technical Support
Santronics Software, Inc.
http://www.santronics.com (sales)
http://www.winserver.com (support)
http://www.winserver.com/AupInfo (Online AUP Help)
Office: 305-248-3204

begin:vcard
fn:Hector Santos
n:Santos;Hector
email;internet:[email protected]
tel;work:305-248-3204
version:2.1
end:vcard

#1 lore raw
Quoted 2 lines · Hector Santos

I'm implementing GIT. If there an option or compile/version that "keep" file timestamps?

The git datamodel stores files as a list of names and whether or not they have the executable bit.

If you need to set the ctime/mtime/whatever on the other side you'd do that via some script you'd ship with your repository.

This may not answer your question, but it isn't very clear.

#2 lore raw
Quoted 10 lines · Ævar Arnfjörð Bjarmason
Quoted 2 lines · Hector Santos

I'm implementing GIT. If there an option or compile/version that "keep" file timestamps?

The git datamodel stores files as a list of names and whether or not they have the executable bit.

If you need to set the ctime/mtime/whatever on the other side you'd do that via some script you'd ship with your repository.

There are existing scripts which implement this approach, like metastore:

https://github.com/przemoc/metastore

I haven't used it, but I think it's fairly mature, as it has been around since the early days of Git.

-Peff

#3 lore raw
Quoted 10 lines · Jeff King

There are existing scripts which implement this approach, like metastore:

https://github.com/przemoc/metastore

I haven't used it, but I think it's fairly mature, as it has been around since the early days of Git.

-Peff

I wasn't considering other "metadata" other than time stamps, but I suppose the metadata would include the time stamps, file attributes and possibly "alternate file streams" as well?

Thanks anyway, I will explore it.

Signature · 6 lines
Hector, Engineering & Technical Support
Santronics Software, Inc.
http://www.santronics.com (sales)
http://www.winserver.com (support)
http://www.winserver.com/AupInfo (Online AUP Help)
Office: 305-248-3204

begin:vcard
fn:Hector Santos
n:Santos;Hector
email;internet:[email protected]
tel;work:305-248-3204
version:2.1
end:vcard

#4 lore raw
In reply to Hector Santos
Quoted 5 lines

-----Original Message-----
From: Hector Santos
Sent: Monday, June 5, 2017 5:14 PM

I'm implementing GIT. If there an option or compile/version that "keep"

file timestamps?

That is not in the tree data structure, see below.

root@blackfat /projects/tipsoftheday

$ git cat-file -p head
tree 4ca3c2a853c8e817d7de8563c331899cace8ee85
parent 2a33f293df6df0d3978612e41fb1ecd52e2450a5
author Jason Pyeron <[email protected]> 1496424815 -0400
committer Jason Pyeron <[email protected]> 1496424815 -0400

add JDK to CM

root@blackfat /projects/tipsoftheday

$ git cat-file -p 4ca3c2a853c8e817d7de8563c331899cace8ee85
040000 tree 76094b81b3877b5b27cd4fe518fa0708af3cefed    admin
040000 tree c66a88871c285e1485f92be0f8fa47185d94d0b3    client
040000 tree 460495af209a580e65b5d0b38132d774ddb283b7    database
040000 tree 264b191b036180039f3fd8c5d56c2b6800cb2ca2    doc
040000 tree dd128195971f7bafa56371aa6027d7c6bc80f351    middleware
040000 tree 7861fd39923950d501d4e39aeac4762f7daaca6b    reports
040000 tree 2ad3dedf0313ae775321c88c53741a4b4a7e87b0    tools

I wish it was an allowable extension, the date could be between the mode and object type.

v/r,

Jason Pyeron

#5 lore raw
Quoted 28 lines · Jason Pyeron
Quoted 5 lines

-----Original Message-----
From: Hector Santos
Sent: Monday, June 5, 2017 5:14 PM

I'm implementing GIT. If there an option or compile/version that "keep"

file timestamps?

That is not in the tree data structure, see below.

root@blackfat /projects/tipsoftheday

$ git cat-file -p head
tree 4ca3c2a853c8e817d7de8563c331899cace8ee85
parent 2a33f293df6df0d3978612e41fb1ecd52e2450a5
author Jason Pyeron <[email protected]> 1496424815 -0400
committer Jason Pyeron <[email protected]> 1496424815 -0400

add JDK to CM

root@blackfat /projects/tipsoftheday

$ git cat-file -p 4ca3c2a853c8e817d7de8563c331899cace8ee85
040000 tree 76094b81b3877b5b27cd4fe518fa0708af3cefed    admin
040000 tree c66a88871c285e1485f92be0f8fa47185d94d0b3    client
040000 tree 460495af209a580e65b5d0b38132d774ddb283b7    database
040000 tree 264b191b036180039f3fd8c5d56c2b6800cb2ca2    doc
040000 tree dd128195971f7bafa56371aa6027d7c6bc80f351    middleware
040000 tree 7861fd39923950d501d4e39aeac4762f7daaca6b    reports
040000 tree 2ad3dedf0313ae775321c88c53741a4b4a7e87b0    tools
Quoted 2 lines

I wish it was an allowable extension, the date could be between the mode and object type.

Yes it's not part of the tree structure, but in this case you can simply set/update the mtime to the date of the last commit that modified the file.

It can be a bit expensive to bootstrap that, and git doesn't help you along at all, you need to do it via hooks or some script you run, but that's a neat way to shove it into the datamodel if you need this for some reason.

#6 lore raw
Quoted 31 lines · Ævar Arnfjörð Bjarmason
Quoted 28 lines · Jason Pyeron
Quoted 5 lines

-----Original Message-----
From: Hector Santos
Sent: Monday, June 5, 2017 5:14 PM

I'm implementing GIT. If there an option or compile/version that "keep"

file timestamps?

That is not in the tree data structure, see below.

root@blackfat /projects/tipsoftheday

$ git cat-file -p head
tree 4ca3c2a853c8e817d7de8563c331899cace8ee85
parent 2a33f293df6df0d3978612e41fb1ecd52e2450a5
author Jason Pyeron <[email protected]> 1496424815 -0400
committer Jason Pyeron <[email protected]> 1496424815 -0400

add JDK to CM

root@blackfat /projects/tipsoftheday

$ git cat-file -p 4ca3c2a853c8e817d7de8563c331899cace8ee85
040000 tree 76094b81b3877b5b27cd4fe518fa0708af3cefed    admin
040000 tree c66a88871c285e1485f92be0f8fa47185d94d0b3    client
040000 tree 460495af209a580e65b5d0b38132d774ddb283b7    database
040000 tree 264b191b036180039f3fd8c5d56c2b6800cb2ca2    doc
040000 tree dd128195971f7bafa56371aa6027d7c6bc80f351    middleware
040000 tree 7861fd39923950d501d4e39aeac4762f7daaca6b    reports
040000 tree 2ad3dedf0313ae775321c88c53741a4b4a7e87b0    tools
Quoted 2 lines

I wish it was an allowable extension, the date could be between the mode and object type.

Quoted 10 lines

Yes it's not part of the tree structure, but in this case you can simply set/update the mtime to the date of the last commit that modified the file.

It can be a bit expensive to bootstrap that, and git doesn't help you along at all, you need to do it via hooks or some script you run, but that's a neat way to shove it into the datamodel if you need this for some reason.

Do you see any technical issues with using programmable hooks or something like this would have to be patched in? I am giving it a serious thought to exploring a fix to the Git Daemon over the wire completion issues on Windows. It appears to be a Half Close socket issue.

Signature · 6 lines
Hector, Engineering & Technical Support
Santronics Software, Inc.
http://www.santronics.com (sales)
http://www.winserver.com (support)
http://www.winserver.com/AupInfo (Online AUP Help)
Office: 305-248-3204

begin:vcard
fn:Hector Santos
n:Santos;Hector
email;internet:[email protected]
tel;work:305-248-3204
version:2.1
end:vcard

#7 lore raw
Quoted 4 lines · Hector Santos

Do you see any technical issues with using programmable hooks or something like this would have to be patched in? I am giving it a serious thought to exploring a fix to the Git Daemon over the wire completion issues on Windows. It appears to be a Half Close socket issue.

You can certainly do it with so kind of hook script.

This is how I do thing to maintain the modtimes for a set of patches that I maintain using guilt (git://repo.or.cz/guilt.git). The following is done using Linux, but I imagine you could translate it into something that would work with powershell, or cygwin, or just use the Windows Subsystem for Linux.

#!/bin/sh
stat -c "touch -d @%Y %n" * | sort -k 3 | grep -v "~$" | sort -k3 > timestamps

I have this shell script saved as ~/bin/save-timestamps. The generated file has lines which look this:

touch -d @1496078695 fix-fdatasync-after-extent-manipulation-operations touch -d @1496081597 status
touch -d @1496082752 series

... and when you execute the command, it will restore the timestamps to the value checked into the git repository. If you want to only restore the timestamp of a single file, you can do something like this:

grep timestamps ^fix-fdatasync-after-extent | bash

Cheers,

- Ted