Re: efficient way to filter several branches with common history?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On Jul 4, 2007, at 10:37 AM, Johannes Sixt wrote:

Steffen Prohaska wrote:

Is there an efficient way to filter several branches at once
through git-filter-branch? Often several branches have a lot
of common history. Therefore, I suspect it would be much more
efficient to filter them with one call to git-filter-branch.
For example how can I efficiently filter all origin/* branches
to filtered/* branches?

That feature is not yet implemented.

In the meantime do it this way:

Make an octopus merge of the branches onto a new branch. (If you have
more than a dozen or so, you better make a hierarchy of octopusses.) You
don't need to resolve conflicts (you are not interested in the merge
result), or use -s ours to avoid them in the first place.
Then filter that new branch.
Then create new refs at the rewritten commits:

   $ git update-ref refs/filtered/b1 $id-of-rewritten-origin/b1
   $ ...

Use gitk to find the $ids-of-rewritten-origin/*

Thanks for your explanation. The following is the template I used
to build my fully automated version of what you proposed:

--- SNIP ---
echo "merging branches to be filtered ..."
git-checkout -b tmp/all origin/master

for b in origin/branchX origin/branchY [ ... more branches here ...]
do
    git merge -s ours -m "merge-for-preparing-filter-branch $b" $b
done

echo "... filtering ..."
git-filter-branch \
[... your git-filter-branch filters here ...] \
  filtered/all >filter-branch.log

echo "... setting heads of filtered branches."
lastp1=
git-log --pretty="format:%s %P" filtered/all |
while read t b p1 p2
do
[[ "$t" == "merge-for-preparing-filter-branch" ]] || { git update-ref refs/heads/filtered/master $lastp1 ; break ; }
    b=filtered/$(basename $b)
    git update-ref refs/heads/$b $p2
    lastp1=$p1
done

echo "delete tmp/all and filtered/all after checking the result"
--- SNIP ---

	Steffen


-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux