Skip to content

Instantly share code, notes, and snippets.

@jamischarles
Last active August 29, 2015 14:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jamischarles/a4e18cc1834f8470226a to your computer and use it in GitHub Desktop.
Save jamischarles/a4e18cc1834f8470226a to your computer and use it in GitHub Desktop.
#!/bin/bash
#Inspired by http://blog.neutrino.es/2012/git-copy-a-file-or-directory-from-another-repository-preserving-history/
#Copy a file or directory out of a git repository, preserving history!
#Creates DESTINATIONPATH with patches that can be applied with git am
#e.g.
#0001-Add-new-theme-Gum.patch
#0002-Add-syntax-highlighting-for-Gum-theme.patch
#0003-Gum-Fix-tag-URLs-not-being-slugified-and-therefore-b.patch
#0004-Gum-Add-Disqus-support.patch
#0005-Gum-Use-article-title-as-the-title-of-the-generated-.patch
#0006-Gum-HTML-escape-tag-names-when-rendering-them.patch
#Usage: copy-git-file.sh /some/repo/interesting/thing /destination/patch/path
#todo, test $1 and $2
DESTINATIONPATH=$2
SOURCE=$1 #first arg to script, either file or dir
pushd $SOURCE
git format-patch -o $DESTINATIONPATH $(git log $SOURCE|grep ^commit|tail -1|awk '{print $2}')..HEAD $SOURCE
popd
@jamischarles
Copy link
Author

You need to manually move the file over FIRST, then run this command

@jamischarles
Copy link
Author

  1. Move/copy file
  2. Then commit the file
  3. git am --ignore-space-change --ignore-whitespace /path/to/patch/file

@jamischarles
Copy link
Author

any problems?

run git rebase --abort
or git am --abort

@jamischarles
Copy link
Author

Q: How do you resolve conflicts?

@jamischarles
Copy link
Author

And what do conflicts look like in an am file?

@jamischarles
Copy link
Author

You can manually change things in the patch files...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment