From 05b0a5d3d5ea1dd58dd10a1b687039051b89f0fe Mon Sep 17 00:00:00 2001 From: Ivan Malopinsky Date: Sun, 19 Apr 2015 12:23:02 -0400 Subject: [PATCH] git-merge-repo --- bin/git-merge-repo | 25 +++++++++ man/git-merge-repo.1 | 51 +++++++++++++++++ man/git-merge-repo.html | 119 ++++++++++++++++++++++++++++++++++++++++ man/git-merge-repo.md | 34 ++++++++++++ 4 files changed, 229 insertions(+) create mode 100755 bin/git-merge-repo create mode 100644 man/git-merge-repo.1 create mode 100644 man/git-merge-repo.html create mode 100644 man/git-merge-repo.md diff --git a/bin/git-merge-repo b/bin/git-merge-repo new file mode 100755 index 000000000..e7700033e --- /dev/null +++ b/bin/git-merge-repo @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +repo=$1 +branch=$2 +prefix=$3 +flat=0 + +if test $prefix = "."; then + prefix=$(mktemp -u 'git-merge-repo.XXXXXXX') + flat=1 +fi + +git subtree add -P "$prefix" "$repo" "$branch" "${@:4}" + +message=$(git log -1 --pretty=%B) + +if test $flat -eq 1; then + git stash -u + mv -i $prefix/* ./ + git undo + git add . + git commit -am "$message" + git stash apply + rm -drf $prefix +fi diff --git a/man/git-merge-repo.1 b/man/git-merge-repo.1 new file mode 100644 index 000000000..90e6e9166 --- /dev/null +++ b/man/git-merge-repo.1 @@ -0,0 +1,51 @@ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 +. +.TH "GIT\-MERGE\-REPO" "1" "April 2015" "" "Git Extras" +. +.SH "NAME" +\fBgit\-merge\-repo\fR \- Merge two repo histories +. +.SH "SYNOPSIS" +\fBgit\-merge\-repo\fR [\-\-squash] +. +.SH "DESCRIPTION" +Merges a repository\'s history with the current repository, inside a specified directory\. +. +.P +Optional \fB\-\-squash\fR flag skips the full history and generates only one commit for the merge\. +. +.SH "EXAMPLES" +Merges a local repo\'s \fBfrontend\fR branch into the current repo\'s \fBweb\fR folder: +. +.IP "" 4 +. +.nf + +$ git merge\-repo \.\./app/\.git frontend web +. +.fi +. +.IP "" 0 +. +.P +Merges a remote repo\'s \fBmaster\fR branch into the current repo\'s folder: +. +.IP "" 4 +. +.nf + +$ git merge\-repo git@github\.com:tj/git\-extras\.git master \. +. +.fi +. +.IP "" 0 +. +.SH "AUTHOR" +Written by Ivan Malopinsky <\fIhello@imsky\.co\fR> +. +.SH "REPORTING BUGS" +<\fIhttps://github\.com/tj/git\-extras/issues\fR> +. +.SH "SEE ALSO" +<\fIhttps://github\.com/tj/git\-extras\fR> diff --git a/man/git-merge-repo.html b/man/git-merge-repo.html new file mode 100644 index 000000000..cc1d787f5 --- /dev/null +++ b/man/git-merge-repo.html @@ -0,0 +1,119 @@ + + + + + + git-merge-repo(1) - Merge two repo histories + + + + +
+ + + +
    +
  1. git-merge-repo(1)
  2. +
  3. Git Extras
  4. +
  5. git-merge-repo(1)
  6. +
+ +

NAME

+

+ git-merge-repo - Merge two repo histories +

+ +

SYNOPSIS

+ +

git-merge-repo <repo> <branch> <directory> [--squash]

+ +

DESCRIPTION

+ +

Merges a repository's history with the current repository, inside a specified directory.

+ +

Optional --squash flag skips the full history and generates only one commit for the merge.

+ +

EXAMPLES

+ +

Merges a local repo's frontend branch into the current repo's web folder:

+ +
$ git merge-repo ../app/.git frontend web
+
+ +

Merges a remote repo's master branch into the current repo's folder:

+ +
$ git merge-repo git@github.com:tj/git-extras.git master .
+
+ +

AUTHOR

+ +

Written by Ivan Malopinsky <hello@imsky.co>

+ +

REPORTING BUGS

+ +

<https://github.com/tj/git-extras/issues>

+ +

SEE ALSO

+ +

<https://github.com/tj/git-extras>

+ + +
    +
  1. +
  2. April 2015
  3. +
  4. git-merge-repo(1)
  5. +
+ +
+ + diff --git a/man/git-merge-repo.md b/man/git-merge-repo.md new file mode 100644 index 000000000..f37895779 --- /dev/null +++ b/man/git-merge-repo.md @@ -0,0 +1,34 @@ +git-merge-repo(1) -- Merge two repo histories +============================================= + +## SYNOPSIS + +`git-merge-repo` <repo> <branch> <directory> [--squash] + +## DESCRIPTION + +Merges a repository's history with the current repository, inside a specified directory. + +Optional `--squash` flag skips the full history and generates only one commit for the merge. + +## EXAMPLES + + Merges a local repo's `frontend` branch into the current repo's `web` folder: + + $ git merge-repo ../app/.git frontend web + + Merges a remote repo's `master` branch into the current repo's folder: + + $ git merge-repo git@github.com:tj/git-extras.git master . + +## AUTHOR + +Written by Ivan Malopinsky <> + +## REPORTING BUGS + +<> + +## SEE ALSO + +<>