* How to (re-)create .git/logs/refs
@ 2008-05-08 9:48 Holger Schurig
0 siblings, 0 replies; 11+ messages in thread
From: Holger Schurig @ 2008-05-08 9:48 UTC (permalink / raw)
To: git
Hi !
I have an old SVN project with lots of commits from 2005 to 2008
converted. This was a month ago. In the mean-time, I've made
some commits from git as well.
"git log" shows both types of commit quite nicely.
"git checkout <sha1>" works also correctly, for arbitrary ancient
SHA1s.
"git checkout @{2007-04-01}" doesn't work. I get an error like
this:
warning: Log for '' only goes back to Thu, 8 May 2008 09:35:38 +0000.
fatal: bad object @{2007-04-01}
However, "git checkout @{2008-05-01}" works, because this commit
come from git direct, not implicitly from SVN. It seems that
neiver "git svn clone" nor "examples/git-svnimport.perl"
creates/updates .git/logs/refs when it creates commits from an
old SVN repository.
So my question:
a) is there a way to re-create .git/logs/refs ?
b) is there a simple way to get a list of ISO-dates and
associated SHA1? Then I could use a little python code to
determine the SHA1 id that corresponds to some date (I need
to access old versions of the source via bitbake and/or
www.openembedded.org, so adding a custom fetch method with
some python magic is a non-brainer).
^ permalink raw reply [flat|nested] 11+ messages in thread
* How to (re-)create .git/logs/refs
@ 2008-05-08 10:56 Holger Schurig
2008-05-08 12:28 ` Holger Schurig
2008-05-08 17:28 ` Nicolas Pitre
0 siblings, 2 replies; 11+ messages in thread
From: Holger Schurig @ 2008-05-08 10:56 UTC (permalink / raw)
To: Git Mailing List
Hi !
I have an old SVN project with lots of commits from 2005 to 2008
converted. This was a month ago. In the mean-time, I've made
some commits from git as well.
"git log" shows both types of commit quite nicely.
"git checkout <sha1>" works also correctly, for arbitrary ancient
SHA1s.
"git checkout @{2007-04-01}" doesn't work. I get an error like
this:
warning: Log for '' only goes back to Thu, 8 May 2008 09:35:38 +0000.
fatal: bad object @{2007-04-01}
However, "git checkout @{2008-05-01}" works, because this commit
was a git commit, not an SVN-converted one. It seems that
neiver "git svn clone" nor "examples/git-svnimport.perl"
creates/updates .git/logs/refs and that therefore @{date} is
useless here.
So my question:
a) is there a way to re-create .git/logs/refs ?
b) is there a simple way to get a list of ISO-dates and
associated SHA1? Then I could use a little python code to
determine the SHA1 id that corresponds to some date (I need
to access old versions of the source via bitbake and/or
www.openembedded.org, so adding a custom fetch method with
some python magic is a non-brainer).
c) any plan to fix git-svn?
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: How to (re-)create .git/logs/refs
2008-05-08 10:56 How to (re-)create .git/logs/refs Holger Schurig
@ 2008-05-08 12:28 ` Holger Schurig
2008-05-08 17:28 ` Nicolas Pitre
1 sibling, 0 replies; 11+ messages in thread
From: Holger Schurig @ 2008-05-08 12:28 UTC (permalink / raw)
To: git
> warning: Log for '' only goes back to Thu, 8 May 2008
> 09:35:38 +0000. fatal: bad object @{2007-04-01}
Oops, this was from another test that I made today. My original
git repository shows of course a different date:
warning: Log for '' only goes back to Wed, 23 Apr 2008 08:36:26 +0200.
fatal: bad object @{2007-05-01}
Also, "git log @{2007-05-01}" | cat gives me this error
message, "git checkout @{2007-05-01}" gives
error: pathspec '@{2007-05-01}' did not match any file(s) known to git.
Did you forget to 'git add'?
which is completely misleading.
Sorry for being unclear in my first mail.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: How to (re-)create .git/logs/refs
2008-05-08 10:56 How to (re-)create .git/logs/refs Holger Schurig
2008-05-08 12:28 ` Holger Schurig
@ 2008-05-08 17:28 ` Nicolas Pitre
2008-05-13 6:42 ` Holger Schurig
1 sibling, 1 reply; 11+ messages in thread
From: Nicolas Pitre @ 2008-05-08 17:28 UTC (permalink / raw)
To: Holger Schurig; +Cc: Git Mailing List
On Thu, 8 May 2008, Holger Schurig wrote:
> So my question:
>
> a) is there a way to re-create .git/logs/refs ?
No.
The reflog records how _you_ modified your various branches locally.
This has no direct relationship with the dates the commits in those
branches were created. It records what was your own view of the
repository in time. So if you performed an import of a SVN repository
last week, then it is normal that you don't have any view into that
particular repository's state before last week.
> b) is there a simple way to get a list of ISO-dates and
> associated SHA1? Then I could use a little python code to
> determine the SHA1 id that corresponds to some date (I need
> to access old versions of the source via bitbake and/or
> www.openembedded.org, so adding a custom fetch method with
> some python magic is a non-brainer).
Have a look at the documentation for the --pretty=format option in the
git-log man page. For example:
git log --pretty=format:"%H %ai"
might be just what you're looking for.
Nicolas
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: How to (re-)create .git/logs/refs
2008-05-08 17:28 ` Nicolas Pitre
@ 2008-05-13 6:42 ` Holger Schurig
2008-05-13 9:11 ` Holger Schurig
2008-05-13 11:46 ` Johannes Schindelin
0 siblings, 2 replies; 11+ messages in thread
From: Holger Schurig @ 2008-05-13 6:42 UTC (permalink / raw)
To: Nicolas Pitre; +Cc: Git Mailing List
> > a) is there a way to re-create .git/logs/refs ?
>
> No.
>
> The reflog records how _you_ modified your various branches
> locally.
Okay, then I presume it's a shortcoming that the @{date} syntax
uses .git/logs/ref. It could do otherwise, e.g. git bisect seems
to able to go via bisection arbitrarily back in time without
using log-refs.
> git log --pretty=format:"%H %ai"
Thanks.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: How to (re-)create .git/logs/refs
2008-05-13 6:42 ` Holger Schurig
@ 2008-05-13 9:11 ` Holger Schurig
2008-05-13 9:38 ` Andreas Ericsson
2008-05-13 11:46 ` Johannes Schindelin
1 sibling, 1 reply; 11+ messages in thread
From: Holger Schurig @ 2008-05-13 9:11 UTC (permalink / raw)
To: git; +Cc: Nicolas Pitre
> Okay, then I presume it's a shortcoming that the @{date}
> syntax uses .git/logs/ref.
Is there any reason sha1_name.c (which is responsible for the @{}
syntax) doesn't include list-objects.h and uses
traverse_commit_list() for it's purposes? It wouldn't then need
to use .git/logs/ref anymore.
If that would be ok, then maybe I find time (in my spare time)
and prepare a patch in this direction.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: How to (re-)create .git/logs/refs
2008-05-13 9:11 ` Holger Schurig
@ 2008-05-13 9:38 ` Andreas Ericsson
0 siblings, 0 replies; 11+ messages in thread
From: Andreas Ericsson @ 2008-05-13 9:38 UTC (permalink / raw)
To: Holger Schurig; +Cc: git, Nicolas Pitre
Holger Schurig wrote:
>> Okay, then I presume it's a shortcoming that the @{date}
>> syntax uses .git/logs/ref.
>
> Is there any reason sha1_name.c (which is responsible for the @{}
> syntax) doesn't include list-objects.h and uses
> traverse_commit_list() for it's purposes?
It would be alot slower for large projects. Otoh it would also mean
it'd work on a freshly cloned repository, so perhaps it's worth
the trade-off.
> It wouldn't then need
> to use .git/logs/ref anymore.
>
> If that would be ok, then maybe I find time (in my spare time)
> and prepare a patch in this direction.
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Andreas Ericsson andreas.ericsson@op5.se
OP5 AB www.op5.se
Tel: +46 8-230225 Fax: +46 8-230231
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: How to (re-)create .git/logs/refs
2008-05-13 6:42 ` Holger Schurig
2008-05-13 9:11 ` Holger Schurig
@ 2008-05-13 11:46 ` Johannes Schindelin
2008-05-13 12:13 ` Holger Schurig
1 sibling, 1 reply; 11+ messages in thread
From: Johannes Schindelin @ 2008-05-13 11:46 UTC (permalink / raw)
To: Holger Schurig; +Cc: Nicolas Pitre, Git Mailing List
Hi,
On Tue, 13 May 2008, Holger Schurig wrote:
> > > a) is there a way to re-create .git/logs/refs ?
> >
> > No.
> >
> > The reflog records how _you_ modified your various branches
> > locally.
>
> Okay, then I presume it's a shortcoming that the @{date} syntax
> uses .git/logs/ref.
Are you sure you understand what @{date} does? It shows you the state
_this_ repository was in at that date.
There is _no way_ to get this information from somewhere else than the
reflogs.
It is a common misconception that you can reference anything by date in a
distributed setup. (Before you ask, I will just mention "clock skew" and
"parallel branches" to give you an idea why this is a misconception.)
Ciao,
Dscho
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: How to (re-)create .git/logs/refs
2008-05-13 11:46 ` Johannes Schindelin
@ 2008-05-13 12:13 ` Holger Schurig
2008-05-13 13:24 ` Jakub Narebski
0 siblings, 1 reply; 11+ messages in thread
From: Holger Schurig @ 2008-05-13 12:13 UTC (permalink / raw)
To: git; +Cc: Johannes Schindelin, Nicolas Pitre
> Are you sure you understand what @{date} does? It shows you
> the state _this_ repository was in at that date.
Who says so? "man git-rev-parse" just says:
o A ref followed by the suffix @ with a date specification
enclosed in a brace pair (e.g. {yesterday}, {1 month 2 weeks 3
days 1 hour 1 second ago} or {1979-02-26 18:30:00}) to specify
the value of the ref at a prior point in time. This suffix may
only be used immediately following a ref name and the ref
must have an existing log ($GIT_DIR/logs/<ref>).
It just states "at a prior point in time", not "at a prior point
in time in your git repository/checkout".
> It is a common misconception that you can reference anything
> by date in a distributed setup. (Before you ask, I will just
> mention "clock skew" and "parallel branches" to give you an
> idea why this is a misconception.)
My idea was to use the first commit (from git-rev-log) where the
date is below the specified date.
To give you some context: Bitbake (from www.openembedded.org) is
a tool that can download software, patch it, configure it,
compile it and create packages out of it. Nothing fancy, except
that it can do this for a huge amount of embedded devices,
usually using a cross-compiler for ARM, MIPS, whatever.
And it can download not just tar files, it can also use CVS, SVN,
hg, git and so on.
In Openembedded, many patch recipes specify the version to use.
If you deal with versioned stuff, e.g.
filename-frob-3.14.tar.bz, this is fine. Sometimes the version
is a SVN revision number. And sometimes it's a git, mercury or
monotone hash. However, the latter beast are almost
non-describing. So many bitbake recipes specify a SRCDATE, and
you can immediately see if SRCDATE=20070501 that it uses an
ancient version of the software, from 1st May 2007. You won't
see that if it would specify
GIT_REV=6e2df4fd066c450b0b3c8e0f1769d4163e2b52c4. Of course you
can do
GIT_REV=6e2df4fd066c450b0b3c8e0f1769d4163e2b52c4
# This is from 2007 May 1st
but then you're redundant and chances are high that those two
lines get out-of-sync.
So, when I have SRCDATE=20070501, I'd be happy if git would, for
me, find out that this is
6e2df4fd066c450b0b3c8e0f1769d4163e2b52c4, even when the commit
6e2df4fd066c450b0b3c8e0f1769d4163e2b52c4 was not done on my
local machine, but is a commit that I pulled from the outside.
Also, when I do "git checkout @{20070501}", I don't usually mind
if, e.g. because of time-skew or multi-heads, I'm not at the
17th commit in this area, but on the top-most for which this
condition is true. I can use "git log" and "git reset" or
whatever to dig my way to the state I want, but git would do the
dull work for me.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: How to (re-)create .git/logs/refs
2008-05-13 12:13 ` Holger Schurig
@ 2008-05-13 13:24 ` Jakub Narebski
2008-05-13 13:50 ` Holger Schurig
0 siblings, 1 reply; 11+ messages in thread
From: Jakub Narebski @ 2008-05-13 13:24 UTC (permalink / raw)
To: Holger Schurig; +Cc: git, Johannes Schindelin, Nicolas Pitre
Holger Schurig <hs4233@mail.mn-solutions.de> writes:
> > Are you sure you understand what @{date} does? It shows you
> > the state _this_ repository was in at that date.
>
> Who says so? "man git-rev-parse" just says:
>
> o A ref followed by the suffix @ with a date specification
> enclosed in a brace pair (e.g. {yesterday}, {1 month 2 weeks 3
> days 1 hour 1 second ago} or {1979-02-26 18:30:00}) to specify
> the value of the ref at a prior point in time. This suffix may
> only be used immediately following a ref name and the ref
> must have an existing log ($GIT_DIR/logs/<ref>).
>
> It just states "at a prior point in time", not "at a prior point
> in time in your git repository/checkout".
Please read carefully: "value of the _ref_" at a given time.
It means value where ref pointed to at given time. That of
course depends on what you did with repository: did you just fetch,
or perhaps you made those commits, or perhaps you rebased branch,
or decided that the work you did is wrong and rewound to previous
version using reset.
As this is purely local matter, it matter only for _your_
repository.
> > It is a common misconception that you can reference anything
> > by date in a distributed setup. (Before you ask, I will just
> > mention "clock skew" and "parallel branches" to give you an
> > idea why this is a misconception.)
>
> My idea was to use the first commit (from git-rev-log) where the
> date is below the specified date.
Which might be not what you want, as you can get revision which
was on some side branch.
> To give you some context: Bitbake (from www.openembedded.org) is
> a tool that can download software, patch it, configure it,
> compile it and create packages out of it. Nothing fancy, except
> that it can do this for a huge amount of embedded devices,
> usually using a cross-compiler for ARM, MIPS, whatever.
>
> And it can download not just tar files, it can also use CVS, SVN,
> hg, git and so on.
>
> In OpenEmbedded, many patch recipes specify the version to use.
> If you deal with versioned stuff, e.g.
> filename-frob-3.14.tar.bz, this is fine. Sometimes the version
> is a SVN revision number. And sometimes it's a git, mercury or
> monotone hash. However, the latter beast are almost
> non-describing. So many bitbake recipes specify a SRCDATE, and
> you can immediately see if SRCDATE=20070501 that it uses an
> ancient version of the software, from 1st May 2007. You won't
> see that if it would specify
> GIT_REV=6e2df4fd066c450b0b3c8e0f1769d4163e2b52c4. Of course you
> can do
>
> GIT_REV=6e2df4fd066c450b0b3c8e0f1769d4163e2b52c4
> # This is from 2007 May 1st
>
> but then you're redundant and chances are high that those two
> lines get out-of-sync.
Thanks for explanation. This is most useful when proposing solutions
to real problem...
The solution, of course, is to use git-describe output instead of
full SHA-1 (this of course assumes that you tag your releases).
Something like "v1.5.5.1-215-gc853afb" is, I think, quite well
self-described. There is still place for ambiguity due without
the shortened sha-1 part due to parallel development, but I think
no less than using date.
> So, when I have SRCDATE=20070501, I'd be happy if git would, for
> me, find out that this is
> 6e2df4fd066c450b0b3c8e0f1769d4163e2b52c4, even when the commit
> 6e2df4fd066c450b0b3c8e0f1769d4163e2b52c4 was not done on my
> local machine, but is a commit that I pulled from the outside.
>
> Also, when I do "git checkout @{20070501}", I don't usually mind
> if, e.g. because of time-skew or multi-heads, I'm not at the
> 17th commit in this area, but on the top-most for which this
> condition is true. I can use "git log" and "git reset" or
> whatever to dig my way to the state I want, but git would do the
> dull work for me.
You can try
$ git checkout "$(git log -1 --pretty=format:%H --before=2007-05-01)"
but YMMV, i.e. if you hit upon correct revision or not would depend
on luck.
--
Jakub Narebski
Poland
ShadeHawk on #git
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: How to (re-)create .git/logs/refs
2008-05-13 13:24 ` Jakub Narebski
@ 2008-05-13 13:50 ` Holger Schurig
0 siblings, 0 replies; 11+ messages in thread
From: Holger Schurig @ 2008-05-13 13:50 UTC (permalink / raw)
To: Jakub Narebski; +Cc: git, Johannes Schindelin, Nicolas Pitre
Hi Jakub !
Thanks for your trick. That completely solves my problem *)
*) I'm fully aware that that "git log" might show something like:
2 days ago: Blah
3 days ago: Muh
3 days ago: Blech
2 days ago: Huwa!
But this won't happen in my case --- at least not in repositories
freshly converted from SVN.
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2008-05-13 13:54 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-08 10:56 How to (re-)create .git/logs/refs Holger Schurig
2008-05-08 12:28 ` Holger Schurig
2008-05-08 17:28 ` Nicolas Pitre
2008-05-13 6:42 ` Holger Schurig
2008-05-13 9:11 ` Holger Schurig
2008-05-13 9:38 ` Andreas Ericsson
2008-05-13 11:46 ` Johannes Schindelin
2008-05-13 12:13 ` Holger Schurig
2008-05-13 13:24 ` Jakub Narebski
2008-05-13 13:50 ` Holger Schurig
-- strict thread matches above, loose matches on Subject: below --
2008-05-08 9:48 Holger Schurig
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).