I would like to see the content of a file in multiple revisions.
I can get them with 'git show' as follows:
% git show REV1:FILE
% git show REV2:FILE
and so on. But that launches a new process for each revision. Now, there is
the option to pass multiple arguments to 'git show':
% git show REV1:FILE REV2:FILE
This gets both revisions in a single process and so is faster. But it
concatenates the content so there isn't a way to separate them out again.
Could 'git show' sprout an option to get multiple things programmatically
so that they can be separated out again? One way would be to quote or escape
the contents somehow so that the result can be parsed:
% git show --porcelain REV1:FILE REV2:FILE
The question is what format should be used to output many strings to stdout.
An alternative would be to specify an output file:
% git show --output foo REV1:FILE # writes foo
% git show --output foo REV1:FILE --output bar REV2:FILE # writes foo, bar
Note that here I am only getting the file content, not log messages or any of
the other things which 'git show' can produce. So perhaps what I really want
is some kind of 'git cat'. Or is there another more appropriate tool?
Thanks,
--
Ed Avis [off-list ref]
From: Jeff King <hidden> Date: 2016-06-15 23:04:34
On Tue, Apr 28, 2015 at 10:10:52AM +0000, Ed Avis wrote:
Could 'git show' sprout an option to get multiple things programmatically
so that they can be separated out again? One way would be to quote or escape
the contents somehow so that the result can be parsed:
% git show --porcelain REV1:FILE REV2:FILE
[...]
Note that here I am only getting the file content, not log messages or any of
the other things which 'git show' can produce. So perhaps what I really want
is some kind of 'git cat'. Or is there another more appropriate tool?
I think you want `git cat-file`:
{
echo REV1:FILE
echo REV2:FILE
} |
git cat-file --batch
This prints a header line for each output object which contains the size
of the object (so a parser reads a header line, then N bytes, then a
header line, N bytes, and so on).
-Peff
I think you want `git cat-file`:
{
echo REV1:FILE
echo REV2:FILE
} |
git cat-file --batch
This prints a header line for each output object which contains the size
of the object (so a parser reads a header line, then N bytes, then a
header line, N bytes, and so on).
This looks like what I want but the object ids printed appear to be the id
of the file in a given revision - not the id of the revision itself.
So the ids in the output are not the same as the ones in the input.
That's fine, as long as I can assume that the output entries are in the same
order as the input?
--
Ed Avis [off-list ref]
From: Jeff King <hidden> Date: 2016-06-15 23:04:34
On Wed, Apr 29, 2015 at 03:47:33PM +0000, Ed Avis wrote:
Jeff King <peff <at> peff.net> writes:
quoted
I think you want `git cat-file`:
{
echo REV1:FILE
echo REV2:FILE
} |
git cat-file --batch
This prints a header line for each output object which contains the size
of the object (so a parser reads a header line, then N bytes, then a
header line, N bytes, and so on).
This looks like what I want but the object ids printed appear to be the id
of the file in a given revision - not the id of the revision itself.
So the ids in the output are not the same as the ones in the input.
Correct. You are feeding a name which resolves to the blob sha1, so
that's what cat-file will output for the object id.
That's fine, as long as I can assume that the output entries are in the same
order as the input?
Yes, it will process and output them in order.
-Peff