Is it possible to set a git commit to have a timestamp prior to 1970? -
unix timestamps signed 32 bit integers (64 bit on systems today, or understand). on software products allows use dates going far 1903 or so.
however, when try following:
git commit -m "this test commit" --date="1960-04-07 18:00:00" i receive "fatal: invalid date format" error.
this isn't practical (i'm not time-traveler), i've been wondering using git historical purposes. can forced git plumbing command? on related note: git use 32 bit timestamp, or depend on environment it's built on?
as far commit c64b9b8 (git 0.99, may 2005), time has been referred
<date> date in 'seconds since epoch'
commit 6eb8ae0 defines date unsigned long since april 2005.
tldr;
date before unix epoch can stored, cannot sure correctly represented.
trying represent date before has been attempted before: see this thread
the date i'm trying set october 4, 1958, around timestamp -354808800.
first technique, using commit
--dateflags iso 8601: says "invalid date".second technique, described in git ml archive, not using porcelain:
git commit git cat-file -p head > tmp.txt # @ point, edit file replace timestamp git hash-object -t commit -w tmp.txt #=> 2ee8fcc02658e23219143f5bcfe6f9a4615745f9 git update-ref -m 'commit: foo' refs/heads/master \ 2ee8fcc02658e23219143f5bcfe6f9a4615745f9 commit date updated,
git showclamps date 0 (jan 1 1970).tig(1)displays55 years agoactual commit date stored.last issue: when trying push commit remote repository:
#=> remote: error: object 2ee8fcc02658e23219143f5bcfe6f9a4615745f9:invalid # author/committer line - bad date #=> remote: fatal: error in object #=> error: unpack failed: index-pack abnormal exit finally, when running
test-dategit sources:
./test-date show -354808800 #=> -354808800 -> in future the discussion @ time mentioned:
i not sure there isn't unportability @ lowest level.
freely interchange between time_t , unsigned long in low-level date code. happens work because casting bits , forth between signed , unsigned types works, long end type want.
isn't portable, , there can subtle bugs. see, example, recent 9ba0f033.the news purely code problem. data format fine. take going through code , switching "
unsigned long" "long long" (ortime_t, or "gittime_t" if want abstract it).and fixing parser algorithm @ least in
tm_to_time_t()it not "
sed s/unsigned long/long long", rather checking every change make sure aren't introducing new bugs, , code correctly handles signed types.
why nobody has done it. ;)
Comments
Post a Comment