# splitting large patch files into smaller ones

3 messages from 2007-08-22 to 2007-08-23. Participants: Erez Zadok, René Scharfe, Johannes Schindelin.
Thread: https://gitlist.dev/t/9615

## Erez Zadok, 2007-08-22 19:29

Subject: splitting large patch files into smaller ones
Message-ID: <200708221929.l7MJTgiL012452@agora.fsl.cs.sunysb.edu>
URL: https://gitlist.dev/e/200708221929.l7MJTgiL012452%40agora.fsl.cs.sunysb.edu

```
I recently had an occasion to take a rather large git-diff patch, and split
it into smaller chunks.  This was so I can more easily import the patches
into guilt, then reorder, rename, shuffle, and join individual patch
snippets into logical patches (i.e., one patch per topic).

I was looking around for a tool that would allow me to split a large patch
file into individual snippets and couldn't find one.  So I wrote one in
perl.  It takes a patch file and creates individual small files, one for
each combination of a filename listed in the patch, and a patch snippet
(starting with an '@@' line).  Each '@@' snippet gets an index number and a
new filename, prefixed with the appropriate header ("diff ...", ---, and +++
lines) so it's a valid patch file on its own.

Questions:

1. Does anyone know of such a tool, perhaps written in C for better speed?

2. If not, is there any interest in such a tool?  If there's interest, I'd
   be happy to cleanup my perl script and contribute it to
   git/guilt/whatever.

Cheers,
Erez.

```

## René Scharfe, 2007-08-22 21:54

Subject: Re: splitting large patch files into smaller ones
Message-ID: <46CCB07C.9010200@lsrfire.ath.cx>
URL: https://gitlist.dev/e/46CCB07C.9010200%40lsrfire.ath.cx
In-Reply-To: <200708221929.l7MJTgiL012452@agora.fsl.cs.sunysb.edu>

```
Erez Zadok schrieb:
> I recently had an occasion to take a rather large git-diff patch, and split
> it into smaller chunks.  This was so I can more easily import the patches
> into guilt, then reorder, rename, shuffle, and join individual patch
> snippets into logical patches (i.e., one patch per topic).
> 
> I was looking around for a tool that would allow me to split a large patch
> file into individual snippets and couldn't find one.  So I wrote one in
> perl.  It takes a patch file and creates individual small files, one for
> each combination of a filename listed in the patch, and a patch snippet
> (starting with an '@@' line).  Each '@@' snippet gets an index number and a
> new filename, prefixed with the appropriate header ("diff ...", ---, and +++
> lines) so it's a valid patch file on its own.
> 
> Questions:
> 
> 1. Does anyone know of such a tool, perhaps written in C for better speed?

The patchutils collection[1] contains a tool called splitdiff, which
does something slightly different[2].  It might be a good starting
point, though.

René


[1] http://cyberelk.net/tim/software/patchutils/?page_id=10
[2] http://cyberelk.net/tim/patchutils/man/splitdiff.html

```

## Johannes Schindelin, 2007-08-23 09:43

Subject: Re: splitting large patch files into smaller ones
Message-ID: <Pine.LNX.4.64.0708231042120.20400@racer.site>
URL: https://gitlist.dev/e/Pine.LNX.4.64.0708231042120.20400%40racer.site
In-Reply-To: <200708221929.l7MJTgiL012452@agora.fsl.cs.sunysb.edu>

```
Hi,

On Wed, 22 Aug 2007, Erez Zadok wrote:

> I was looking around for a tool that would allow me to split a large 
> patch file into individual snippets and couldn't find one.  So I wrote 
> one in perl.  It takes a patch file and creates individual small files, 
> one for each combination of a filename listed in the patch, and a patch 
> snippet (starting with an '@@' line).  Each '@@' snippet gets an index 
> number and a new filename, prefixed with the appropriate header ("diff 
> ...", ---, and +++ lines) so it's a valid patch file on its own.

You can do that with "git add -i" and with "git gui" AFAIK.  I even 
started some code to split hunks in "git gui", but it was pointed out that 
that code was not complete, and I did not have time to finish it.

Ciao,
Dscho

```
