Skip to content

Commit

Permalink
Merge pull request tj#563 from lukechilds/improve-fork
Browse files Browse the repository at this point in the history
git-fork: use ssh remotes if possible
  • Loading branch information
nicolaiskogheim authored Aug 4, 2016
2 parents dcf94a3 + 93ae8fd commit 5d15928
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 28 deletions.
17 changes: 8 additions & 9 deletions Commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ project : git-extras

## git line-summary

WARNING: git line-summary has been replaced by git summary --line and will be removed in a future release.
WARNING: git line-summary has been replaced by git summary --line and will be removed in a future release.

## git effort

Expand All @@ -216,7 +216,7 @@ $ git effort --above 5
```

If you wish to see only the commits in the last month you may use `--since` (it supports the same syntax like `git log --since`):

```
$ git effort --since='last month'
```
Expand Down Expand Up @@ -320,7 +320,7 @@ Does the following:
- forks the repo (prompts for github username and pass)
- clones the repo into the current directory
- adds the original repo as a remote so can track upstream changes
- all remotes refs use git over ssh
- all remotes refs use git over ssh if configured, otherwise https will be used


```Shell
Expand Down Expand Up @@ -465,7 +465,7 @@ To show just the global or just the local file's contents, you can use the follo

* `-g` or `--global` to show just the global file
* `-l` or `--local` to show just the local file

```bash
$ git ignore -g
Global gitignore: /Users/foo/.gitignore_global
Expand Down Expand Up @@ -500,7 +500,7 @@ $ git ignore-io vim
.netrwhist
*~
```

To export it to `.gitignore` file you can use the following options:

* `-a` or `--append` to append the result to `.gitignore`
Expand All @@ -514,7 +514,7 @@ For efficiency, `git ignore-io` store all available types at `~/.gi_list`.
To list all the available types:

* `-l` or `-L` : These two options will show the list in different format. Just try it.

You can also search type from the list by:

* `-s <word>` or `--search <word>`
Expand Down Expand Up @@ -842,7 +842,7 @@ Set up a git repository (if one doesn't exist), add all files, and make an initi

A convenient way to copy files from the current working tree to the working directory of a remote repository. If a `<commits>...` is provided, only files that has changed within the commit range will be copied.

Internally this script uses `rsync` and not `scp` as the name suggests.
Internally this script uses `rsync` and not `scp` as the name suggests.

`git-rscp` - The reverse of `git-scp`. Copies specific files from the working directory of a remote repository to the current working directory.

Expand Down Expand Up @@ -1116,7 +1116,7 @@ Create pull request via commandline.
## git rebase-patch
Given you have a patch that doesn´t apply to the current HEAD, but you know it applied to some commit in the past,
Given you have a patch that doesn´t apply to the current HEAD, but you know it applied to some commit in the past,
`git rebase-patch` will help you find that commit and do a rebase.
For example,
Expand Down Expand Up @@ -1146,4 +1146,3 @@ Sync local branch with origin/master
```bash
$ git sync origin master
```
15 changes: 12 additions & 3 deletions bin/git-fork
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,25 @@ fi
curl -X POST -u "$user" "https://api.github.com/repos/$owner/$project/forks"
[ $? = 0 ] || abort "fork failed"

# Check if user has ssh configured with GitHub
ssh -o BatchMode=yes [email protected] exit >/dev/null 2>&1
ssh_exit_code=$?
if [[ "$ssh_exit_code" = 0 ]] || [[ "$ssh_exit_code" = 1 ]]; then
remote_prefix="[email protected]:"
else
remote_prefix="https://github.com/"
fi

if [ "$origin" = true ]; then
git remote rename origin upstream
git remote add origin "https://github.com/$user/$project"
git remote add origin "$remote_prefix$user/$project"
git fetch origin
else
# clone forked repo into current dir
git clone "https://github.com/$user/$project" "$project"
git clone "$remote_prefix$user/$project" "$project"

# add reference to origin fork so can merge in upstream changes
cd "$project"
git remote add upstream "https://github.com/$owner/$project"
git remote add upstream "$remote_prefix$owner/$project"
git fetch upstream
fi
13 changes: 8 additions & 5 deletions man/git-fork.1
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "GIT\-FORK" "1" "July 2016" "" "Git Extras"
.TH "GIT\-FORK" "1" "August 2016" "" "Git Extras"
.
.SH "NAME"
\fBgit\-fork\fR \- Fork a repo on github
Expand Down Expand Up @@ -37,6 +37,9 @@ adds the forked repo as a remote called \fBorigin\fR
.
.IP "" 0
.
.P
Remotes will use ssh if you have it configured with GitHub, if not, https will be used\.
.
.SH "EXAMPLE"
Fork expect\.js:
.
Expand Down Expand Up @@ -74,10 +77,10 @@ $ \.\.<forks into your github profile and clones repo locally to expect\.js dir>

$ cd expect\.js && git remote \-v

origin https://github\.com/<user>/expect\.js (fetch)
origin https://github\.com/<user>/expect\.js (push)
upstream https://github\.com/LearnBoost/expect\.js (fetch)
upstream https://github\.com/LearnBoost/expect\.js (push)
origin git@github\.com:<user>/expect\.js (fetch)
origin git@github\.com:<user>/expect\.js (push)
upstream git@github\.com:LearnBoost/expect\.js (fetch)
upstream git@github\.com:LearnBoost/expect\.js (push)
.
.fi
.
Expand Down
14 changes: 8 additions & 6 deletions man/git-fork.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 7 additions & 5 deletions man/git-fork.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@ git-fork(1) -- Fork a repo on github
If a url is not given and the current dir is a github repo, fork the repo.

1. forks the current repo
3. rename the `origin` remote repo to `upstream`
2. rename the `origin` remote repo to `upstream`
3. adds the forked repo as a remote called `origin`

Remotes will use ssh if you have it configured with GitHub, if not, https will be used.

## EXAMPLE

Fork expect.js:
Expand All @@ -35,10 +37,10 @@ git-fork(1) -- Fork a repo on github

$ cd expect.js && git remote -v

origin https://github.com/<user>/expect.js (fetch)
origin https://github.com/<user>/expect.js (push)
upstream https://github.com/LearnBoost/expect.js (fetch)
upstream https://github.com/LearnBoost/expect.js (push)
origin git@github.com:<user>/expect.js (fetch)
origin git@github.com:<user>/expect.js (push)
upstream git@github.com:LearnBoost/expect.js (fetch)
upstream git@github.com:LearnBoost/expect.js (push)

If the current dir is a clone of expect.js, this has the same effect:

Expand Down

0 comments on commit 5d15928

Please sign in to comment.