From: Alex Riesen <raa.lkml@gmail.com>
To: Steffen Prohaska <prohaska@zib.de>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] transplant: move a series of commits to a different parent
Date: Sun, 24 Jun 2007 11:30:17 +0200 [thread overview]
Message-ID: <20070624093017.GC2467@steel.home> (raw)
In-Reply-To: <4D530871-0CBE-4F9A-99B7-ECF0F4656D85@zib.de>
Steffen Prohaska, Sun, Jun 24, 2007 11:05:29 +0200:
> >Steffen Prohaska, Sat, Jun 23, 2007 21:27:57 +0200:
> >>+for commit in $(git-rev-list --reverse $from..$to)
> >>+do
> >>+ echo "rewriting commit $commit..."
> >>+ git-diff-tree -r $commit | grep ^: | cut -b 9-15,57-97,100- |
> >>+ while read mode sha path
> >>+ do
> >>+ echo " $mode $sha $path"
> >>+ git-update-index --add --cacheinfo $mode $sha $path
> >>+ done
> >
> >Why not just read-tree for every commit? It is not like you're
> >modifying the repository in any way, just changing parenthood. That'd
> >solve the problem with deletions.
> >So it should be enough to read-tree the repo state for each and every
> >source commit into the index (and you can just use a temporary index
> >file for that, see GIT_INDEX_FILE). Than just commit the index.
>
> I am changing the repository.
>
No, you don't.
> I only modify the index for files that have changes in $commit. Their
> content gets replaced by the content from the commit. I'm leaving
> all other files untouched.
No, you don't modify anything. Ever tried to run git-status after your
script finished? Tried to understand what the output means?
> This creates a new series of commits that starts from the repository
> state of <onto> and has mixed in files only if they are changed in
> the series of commits from..to. These files are just replaced. I'm not
> trying to merge changes but just replace the whole file.
>
> Opposed to that, read-tree would modify the content of _all_ files.
No, it wouldn't (unless you run git-read-tree -u, and I fail to see
why would you want that). You probably confuse git-read-tree with
git-checkout-index.
> This is exactly what I want to achieve. The content of the files on
> branch 3 is correct for all files that were committed after 2. But
> because 2 is the wrong branching point all the content originating
> from commits between 1 and 2 is wrong. Files committed between
> 2 and 3 have the right content but the branch needs to be attached
> at 1.
This misses merges (see git-rev-list --parents), but does the job for
linear history:
export GIT_INDEX_FILE="$(git rev-parse --git-dir)/tr.idx"
parent=$(git rev-parse "$onto")
git rev-list --reverse "$from..$to" | while read c
do
rm -f "$GIT_INDEX_FILE"
git read-tree $c || break;
# Authorship information here
parent=$(git cat-file commit $c | \
sed -e '1,/^$/d' | \
git commit-tree $(git write-tree) -p "$parent")
echo "Commit $parent"
done
next prev parent reply other threads:[~2007-06-24 9:30 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-23 12:51 [PATCH] cvsimport: test case for severe branch import problem Steffen Prohaska
2007-06-23 13:26 ` Steffen Prohaska
2007-06-23 19:27 ` [PATCH] transplant: move a series of commits to a different parent Steffen Prohaska
2007-06-23 20:54 ` Johannes Schindelin
2007-06-24 6:55 ` Steffen Prohaska
2007-06-23 21:04 ` Alex Riesen
2007-06-24 7:08 ` Steffen Prohaska
2007-06-24 8:20 ` Alex Riesen
2007-06-24 10:26 ` Johannes Schindelin
2007-06-24 10:45 ` Steffen Prohaska
2007-06-25 7:16 ` Johannes Sixt
2007-06-25 7:49 ` Steffen Prohaska
2007-06-25 8:03 ` Johannes Sixt
2007-06-24 8:29 ` Alex Riesen
2007-06-24 9:05 ` Steffen Prohaska
2007-06-24 9:30 ` Alex Riesen [this message]
2007-06-24 17:13 ` Steffen Prohaska
2007-06-24 18:35 ` Alex Riesen
2007-06-24 20:54 ` Steffen Prohaska
2007-06-24 22:20 ` Alex Riesen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070624093017.GC2467@steel.home \
--to=raa.lkml@gmail.com \
--cc=git@vger.kernel.org \
--cc=prohaska@zib.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).