git-process-lib 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +123 -0
- data/Gemfile +21 -0
- data/Gemfile.lock +57 -0
- data/LICENSE +193 -0
- data/README.md +342 -0
- data/Rakefile +32 -0
- data/bin/git-new-fb +39 -0
- data/bin/git-pull-request +63 -0
- data/bin/git-sync +38 -0
- data/bin/git-to-master +44 -0
- data/docs/git-new-fb.1.adoc +83 -0
- data/docs/git-process.1.adoc +227 -0
- data/docs/git-pull-request.1.adoc +166 -0
- data/docs/git-sync.1.adoc +120 -0
- data/docs/git-to-master.1.adoc +172 -0
- data/git-new-fb.gemspec +20 -0
- data/git-process-lib.gemspec +25 -0
- data/git-process.gemspec +22 -0
- data/git-pull-request.gemspec +20 -0
- data/git-sync.gemspec +20 -0
- data/git-to-master.gemspec +20 -0
- data/lib/git-process/abstract_error_builder.rb +53 -0
- data/lib/git-process/changed_file_helper.rb +115 -0
- data/lib/git-process/git_abstract_merge_error_builder.rb +130 -0
- data/lib/git-process/git_branch.rb +105 -0
- data/lib/git-process/git_branches.rb +81 -0
- data/lib/git-process/git_config.rb +135 -0
- data/lib/git-process/git_lib.rb +646 -0
- data/lib/git-process/git_logger.rb +84 -0
- data/lib/git-process/git_merge_error.rb +28 -0
- data/lib/git-process/git_process.rb +159 -0
- data/lib/git-process/git_process_error.rb +18 -0
- data/lib/git-process/git_process_options.rb +101 -0
- data/lib/git-process/git_rebase_error.rb +30 -0
- data/lib/git-process/git_remote.rb +222 -0
- data/lib/git-process/git_status.rb +108 -0
- data/lib/git-process/github_configuration.rb +298 -0
- data/lib/git-process/github_pull_request.rb +165 -0
- data/lib/git-process/new_fb.rb +49 -0
- data/lib/git-process/parked_changes_error.rb +41 -0
- data/lib/git-process/pull_request.rb +136 -0
- data/lib/git-process/pull_request_error.rb +25 -0
- data/lib/git-process/rebase_to_master.rb +148 -0
- data/lib/git-process/sync_process.rb +55 -0
- data/lib/git-process/syncer.rb +157 -0
- data/lib/git-process/uncommitted_changes_error.rb +23 -0
- data/lib/git-process/version.rb +22 -0
- data/local-build.rb +24 -0
- data/spec/FileHelpers.rb +19 -0
- data/spec/GitRepoHelper.rb +123 -0
- data/spec/changed_file_helper_spec.rb +127 -0
- data/spec/git_abstract_merge_error_builder_spec.rb +64 -0
- data/spec/git_branch_spec.rb +123 -0
- data/spec/git_config_spec.rb +45 -0
- data/spec/git_lib_spec.rb +176 -0
- data/spec/git_logger_spec.rb +66 -0
- data/spec/git_process_spec.rb +208 -0
- data/spec/git_remote_spec.rb +227 -0
- data/spec/git_status_spec.rb +122 -0
- data/spec/github_configuration_spec.rb +152 -0
- data/spec/github_pull_request_spec.rb +117 -0
- data/spec/github_test_helper.rb +49 -0
- data/spec/new_fb_spec.rb +126 -0
- data/spec/pull_request_helper.rb +94 -0
- data/spec/pull_request_spec.rb +137 -0
- data/spec/rebase_to_master_spec.rb +362 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/sync_spec.rb +1474 -0
- metadata +249 -0
@@ -0,0 +1,166 @@
|
|
1
|
+
GIT-PULL-REQUEST(1)
|
2
|
+
===================
|
3
|
+
:doctype: manpage
|
4
|
+
|
5
|
+
|
6
|
+
NAME
|
7
|
+
----
|
8
|
+
git-pull-request - Creates or gets a GitHub pull request.
|
9
|
+
|
10
|
+
|
11
|
+
SYNOPSIS
|
12
|
+
--------
|
13
|
+
'git-pull-request' ['OPTIONS']
|
14
|
+
|
15
|
+
'git-pull-request' ['OPTIONS'] 'pull_request_title'
|
16
|
+
|
17
|
+
'git-pull-request' ['OPTIONS'] [ 'server/pull_request_number' | 'pull_request_number' ]
|
18
|
+
|
19
|
+
|
20
|
+
DESCRIPTION
|
21
|
+
-----------
|
22
|
+
'git-pull-request(1)' creates or gets a pull request on the GitHub
|
23
|
+
server associated with the current branch. For the reasons why pull
|
24
|
+
requests are useful for the development process,
|
25
|
+
see <https://help.github.com/articles/using-pull-requests>
|
26
|
+
|
27
|
+
The 'git-pull-request(1)' command is a nice, simplified alternative to using the
|
28
|
+
web interface that takes advantage of the conventions used in the rest of the
|
29
|
+
'git-process(1)' suite.
|
30
|
+
|
31
|
+
If no name or number is provided, it is assumed that you want to create a new
|
32
|
+
pull request with the same name as the current branch. If a name is explicitly
|
33
|
+
given, that is used instead.
|
34
|
+
|
35
|
+
If a number is given, or a number with a server preceding it (e.g., "origin/23"),
|
36
|
+
then this assumes that the number refers to an existing pull request identified
|
37
|
+
by that number. In that case, the branch associated with the HEAD of the pull
|
38
|
+
request is checked out.
|
39
|
+
|
40
|
+
The URL for the newly created pull request is shown, making it trivial to make
|
41
|
+
any changes you want to it, such as adding additional notes. (Most terminal
|
42
|
+
programs allow you to "click through" a URL, though they all differ slightly
|
43
|
+
in how. For example, iTerm2 on OS X does it with a Cmd-Click.)
|
44
|
+
|
45
|
+
The counterpart to this command is 'git-to-master(1)'.
|
46
|
+
|
47
|
+
It's assumed that you *never* do any work directly on the integration branch:
|
48
|
+
everything is done on a feature branch. In addition to being a much
|
49
|
+
safer and more flexible way of working in general, it is also a
|
50
|
+
requirement to take advantage of same-repo pull request functionality.
|
51
|
+
|
52
|
+
|
53
|
+
OPTIONS
|
54
|
+
-------
|
55
|
+
|
56
|
+
The effective default is "*git pull-request -r -i -f*".
|
57
|
+
|
58
|
+
*-b <branch>, --base-branch <branch>*::
|
59
|
+
The branch on the server that you want this "pulled" into. See the
|
60
|
+
'gitProcess.integrationBranch' configuration item. (*default: the integration branch*)
|
61
|
+
|
62
|
+
*-e <branch>, --head-branch <branch>*::
|
63
|
+
The branch that you want reviewed before being "pulled" into the
|
64
|
+
base branch. (*default: the current branch*)
|
65
|
+
|
66
|
+
*-r <repo>, --repo-name <repo>*::
|
67
|
+
The name of the repository to "pull" into. See the 'gitProcess.remoteName'
|
68
|
+
configuration item. (*default: the current repository)
|
69
|
+
|
70
|
+
*-d <desc>, --description <desc>*::
|
71
|
+
The description of the Pull Request. Usually includes a nice description of what was
|
72
|
+
changed to make things easier for the reviewer.
|
73
|
+
|
74
|
+
*-u <username>, --user <username>*::
|
75
|
+
Your GitHub username. Only needed the first time you connect, and you will be
|
76
|
+
prompted for it if needed. Used to generate the value for the 'gitProcess.github.authtoken'
|
77
|
+
configuration. See also the 'github.user' configuration item.
|
78
|
+
|
79
|
+
*-p <password>, --password <password>*::
|
80
|
+
Your GitHub password. Only needed the first time you connect, and you will be
|
81
|
+
prompted for it if needed. Used to generate the value for the 'gitProcess.github.authtoken'
|
82
|
+
configuration.
|
83
|
+
|
84
|
+
*--info*::
|
85
|
+
Informational messages; show the major things this is doing (*default: true*)
|
86
|
+
|
87
|
+
*-q, --quiet*::
|
88
|
+
Quiet messages; only show errors
|
89
|
+
|
90
|
+
*-v, --verbose*::
|
91
|
+
Verbose messages; show lots of details on what this is doing
|
92
|
+
|
93
|
+
*--version*::
|
94
|
+
Print version and exit
|
95
|
+
|
96
|
+
|
97
|
+
CONFIGURATION
|
98
|
+
-------------
|
99
|
+
|
100
|
+
Options for 'git-sync(1)' are set using 'git-config(1)'.
|
101
|
+
|
102
|
+
*gitProcess.remoteName*::
|
103
|
+
Allows you to explicitly set the remote server name to use. Defaults
|
104
|
+
to the first server name reported by 'git-remote(1)'.
|
105
|
+
|
106
|
+
*gitProcess.integrationBranch*::
|
107
|
+
Allows you to explicitly set the integration branch to use. Defaults
|
108
|
+
to "master".
|
109
|
+
|
110
|
+
*gitProcess.github.authtoken*::
|
111
|
+
Not meant to be set manually, this is the OAuth token used to communicate
|
112
|
+
with the GitHub server. If it is not set, the user will be prompted for their credentials.
|
113
|
+
|
114
|
+
*github.user*::
|
115
|
+
If OAuth needs to prompt for credentials, if this value is set then it is
|
116
|
+
used as the username. Otherwise it is unused.
|
117
|
+
|
118
|
+
|
119
|
+
GITHUB SUPPORT
|
120
|
+
--------------
|
121
|
+
|
122
|
+
To know which GitHub URL to use, the value of 'gitProcess.remoteName' is resolved
|
123
|
+
to the underlying server name/IP. (That includes
|
124
|
+
"aliased" names in a 'ssh_config(5)' file.) If it's github.com, then the public
|
125
|
+
GitHub.com API is used. Otherwise it's assumed that the server is GitHub Enterprise
|
126
|
+
and that set of URLs is used.
|
127
|
+
|
128
|
+
|
129
|
+
EXAMPLE
|
130
|
+
-------
|
131
|
+
|
132
|
+
You've been developing your killer new feature or bug fix, and you want
|
133
|
+
someone else to look at it (to do code-review or otherwise provide input).
|
134
|
+
'git-pull-request(1)' synchronizes the current branch with
|
135
|
+
the server (effectively executing 'git-sync(1)') and creates the pull request
|
136
|
+
against the integration branch.
|
137
|
+
|
138
|
+
|
139
|
+
CONTROL FILES
|
140
|
+
-------------
|
141
|
+
|
142
|
+
*gitprocess-sync-\***--**::
|
143
|
+
To help make the process simpler and more reliable, 'git-pull-request(1)' will put a file in the "'.git'" directory
|
144
|
+
that contains the SHA-1 of the last successful sync to the server. 'git-to-master(1)' will remove the file
|
145
|
+
as part of its normal "housekeeping."
|
146
|
+
|
147
|
+
|
148
|
+
SEE ALSO
|
149
|
+
--------
|
150
|
+
|
151
|
+
*git-process*(1), *git-to-master*(1), *git-new-fb*(1), *git-sync*(1)
|
152
|
+
|
153
|
+
|
154
|
+
BUGS
|
155
|
+
----
|
156
|
+
Known bug list: <https://github.com/jdigger/git-process/issues?state=open>
|
157
|
+
|
158
|
+
|
159
|
+
AUTHOR
|
160
|
+
------
|
161
|
+
git-sync has been written primarily by Jim Moore.
|
162
|
+
|
163
|
+
|
164
|
+
RESOURCES
|
165
|
+
---------
|
166
|
+
Main web site: <https://github.com/jdigger/git-process>
|
@@ -0,0 +1,120 @@
|
|
1
|
+
GIT-SYNC(1)
|
2
|
+
===========
|
3
|
+
:doctype: manpage
|
4
|
+
|
5
|
+
|
6
|
+
NAME
|
7
|
+
----
|
8
|
+
git-sync - Syncs local changes with the server.
|
9
|
+
|
10
|
+
|
11
|
+
SYNOPSIS
|
12
|
+
--------
|
13
|
+
'git-sync' ['OPTIONS'] [ 'branchname' ]
|
14
|
+
|
15
|
+
|
16
|
+
DESCRIPTION
|
17
|
+
-----------
|
18
|
+
'git-sync(1)' fetches the latest repository from the server, rebases/merges
|
19
|
+
the current branch against the changes in the integration branch, then pushes
|
20
|
+
the result up to a branch on the server of the same name. (Unless told not to.)
|
21
|
+
|
22
|
+
If a branch name is given, it is assumed that it is a remote branch that you want
|
23
|
+
to start doing work on with full 'git-sync(1)' support. The branch will be fetched
|
24
|
+
from the server, checked out, and a control file created.
|
25
|
+
|
26
|
+
There is a lot of logic to make sure that rebasing/merging happens safely and
|
27
|
+
with minimal conflicts regardless of things like squashes, multiple people working
|
28
|
+
on the same feature branch, etc.
|
29
|
+
|
30
|
+
|
31
|
+
OPTIONS
|
32
|
+
-------
|
33
|
+
|
34
|
+
The effective default is "*git sync -r -i -f*".
|
35
|
+
|
36
|
+
*-r, --rebase*::
|
37
|
+
Rebase instead of merge against the integration branch (*default: true*)
|
38
|
+
|
39
|
+
*--merge*::
|
40
|
+
Merge instead of rebase against the integration branch
|
41
|
+
|
42
|
+
*-f, --force*::
|
43
|
+
Force the push; defaults to *true* if *--rebase* is used
|
44
|
+
|
45
|
+
*-l, --local*::
|
46
|
+
Do not do a push; gets remote changes, but does not update the server
|
47
|
+
|
48
|
+
*--info*::
|
49
|
+
Informational messages; show the major things this is doing (*default: true*)
|
50
|
+
|
51
|
+
*-q, --quiet*::
|
52
|
+
Quiet messages; only show errors
|
53
|
+
|
54
|
+
*-v, --verbose*::
|
55
|
+
Verbose messages; show lots of details on what this is doing
|
56
|
+
|
57
|
+
*--version*::
|
58
|
+
Print version and exit
|
59
|
+
|
60
|
+
|
61
|
+
CONFIGURATION
|
62
|
+
-------------
|
63
|
+
|
64
|
+
Options for 'git-sync(1)' are set using 'git-config(1)'.
|
65
|
+
|
66
|
+
*gitProcess.remoteName*::
|
67
|
+
Allows you to explicitly set the remote server name to use. Defaults
|
68
|
+
to the first server name reported by 'git-remote(1)'.
|
69
|
+
|
70
|
+
*gitProcess.integrationBranch*::
|
71
|
+
Allows you to explicitly set the integration branch to use. Defaults
|
72
|
+
to "master".
|
73
|
+
|
74
|
+
*gitProcess.defaultRebaseSync*::
|
75
|
+
Should 'git-sync(1)' use *--rebase* by default instead of *--merge*? Defaults to *true*.
|
76
|
+
|
77
|
+
|
78
|
+
EXAMPLE
|
79
|
+
-------
|
80
|
+
|
81
|
+
Assuming that the current branch is called "interesting_changes" and the integration
|
82
|
+
branch on the server is "master", typing "git sync" will do roughly the following
|
83
|
+
for you:
|
84
|
+
|
85
|
+
$ git fetch -p
|
86
|
+
# if there have been changes on the remote fb since the last sync
|
87
|
+
$ git rebase origin/interesting_changes
|
88
|
+
$ git rebase origin/master
|
89
|
+
# verify nothing has changed in the window of time since the last check
|
90
|
+
$ git push origin +interesting_changes:interesting_changes
|
91
|
+
|
92
|
+
|
93
|
+
CONTROL FILES
|
94
|
+
-------------
|
95
|
+
|
96
|
+
*gitprocess-sync-\***--**::
|
97
|
+
To help make the process simpler and more reliable, 'git-sync(1)' will put a file in the "'.git'" directory
|
98
|
+
that contains the SHA-1 of the last successful sync to the server. 'git-to-master(1)' will remove the file
|
99
|
+
as part of its normal "housekeeping."
|
100
|
+
|
101
|
+
|
102
|
+
SEE ALSO
|
103
|
+
--------
|
104
|
+
|
105
|
+
*git-process*(1), *git-to-master*(1), *git-new-fb*(1), *git-pull-request*(1)
|
106
|
+
|
107
|
+
|
108
|
+
BUGS
|
109
|
+
----
|
110
|
+
Known bug list: <https://github.com/jdigger/git-process/issues?state=open>
|
111
|
+
|
112
|
+
|
113
|
+
AUTHOR
|
114
|
+
------
|
115
|
+
git-sync has been written primarily by Jim Moore.
|
116
|
+
|
117
|
+
|
118
|
+
RESOURCES
|
119
|
+
---------
|
120
|
+
Main web site: <https://github.com/jdigger/git-process>
|
@@ -0,0 +1,172 @@
|
|
1
|
+
GIT-TO-MASTER(1)
|
2
|
+
================
|
3
|
+
:doctype: manpage
|
4
|
+
|
5
|
+
|
6
|
+
NAME
|
7
|
+
----
|
8
|
+
git-to-master - Rebase against the integration branch, then pushes to it.
|
9
|
+
|
10
|
+
|
11
|
+
SYNOPSIS
|
12
|
+
--------
|
13
|
+
'git-to-master' ['OPTIONS'] ['server/pull_request_number' | 'pull_request_number']
|
14
|
+
|
15
|
+
|
16
|
+
DESCRIPTION
|
17
|
+
-----------
|
18
|
+
|
19
|
+
'git-to-master(1)' fetches the latest changes from the server, rebases against
|
20
|
+
the integration branch, pushes to the integration branch, then does
|
21
|
+
housecleaning.
|
22
|
+
|
23
|
+
If there is a problem, such as a merge conflict, this tries to
|
24
|
+
resolve it automatically. If it can not do so safely in an automated way,
|
25
|
+
if tells you the steps involved for doing so manually.
|
26
|
+
|
27
|
+
"Housecleaning" includes such things as closing any
|
28
|
+
Pull Request that may exist for the branch, removing the (now obsolete)
|
29
|
+
local and remote feature branches, and then "parking" on the
|
30
|
+
special "'_parking_'" branch.
|
31
|
+
|
32
|
+
Work is not expected to be done on the "'_parking_'" branch, but any that is
|
33
|
+
done is brought over to a newly created feature branch when you do
|
34
|
+
'git-new-fb(1)'.
|
35
|
+
|
36
|
+
It's assumed that you *never* do any work directly on the integration branch:
|
37
|
+
everything is done on a feature branch. In addition to being a much
|
38
|
+
safer and more flexible way of working in general, it is also a
|
39
|
+
requirement to take advantage of pull request functionality. (See
|
40
|
+
'git-pull-request(1)'.)
|
41
|
+
|
42
|
+
If a number is given, or a number with a server preceding it (e.g.,
|
43
|
+
"origin/23"), then this assumes that the number refers to an existing pull
|
44
|
+
request identified by that number. In that case, the branch associated with
|
45
|
+
the HEAD of the pull request is checked out before doing the rest of the
|
46
|
+
"to-master".
|
47
|
+
|
48
|
+
|
49
|
+
EXAMPLE WITHOUT PULL REQUEST
|
50
|
+
----------------------------
|
51
|
+
|
52
|
+
Assuming that the current branch is called "interesting_changes" and the
|
53
|
+
integration branch on the server is "master", typing "*git to-master*" will do
|
54
|
+
roughly the following for you:
|
55
|
+
|
56
|
+
$ git fetch -p
|
57
|
+
$ git rebase origin/master
|
58
|
+
$ git push origin interesting_changes:master
|
59
|
+
# close pull request if one exists
|
60
|
+
$ git checkout -b _parking_ origin/master
|
61
|
+
$ git branch -d interesting_changes
|
62
|
+
$ git push origin --delete interesting_changes
|
63
|
+
|
64
|
+
If you use the --keep option, then the process stops after the first "push".
|
65
|
+
|
66
|
+
|
67
|
+
EXAMPLE WITH PULL REQUEST
|
68
|
+
-------------------------
|
69
|
+
|
70
|
+
Assuming that the pull request number is 493, its branch name is "interesting_changes"
|
71
|
+
and the integration branch on the server is "master", typing "*git to-master 493*" will
|
72
|
+
do roughly the following for you:
|
73
|
+
|
74
|
+
$ git fetch -p
|
75
|
+
# looks up the information for pull-request 493
|
76
|
+
$ git checkout -b interesting_changes origin/interesting_changes
|
77
|
+
$ git rebase origin/master
|
78
|
+
$ git push origin interesting_changes:master
|
79
|
+
# close pull request
|
80
|
+
$ git checkout -b _parking_ origin/master
|
81
|
+
$ git branch -d interesting_changes
|
82
|
+
$ git push origin --delete interesting_changes
|
83
|
+
|
84
|
+
If you would like the review the changes locally first, use 'git-pull-request(1)'
|
85
|
+
instead.
|
86
|
+
|
87
|
+
|
88
|
+
OPTIONS
|
89
|
+
-------
|
90
|
+
|
91
|
+
The effective default is "*git to-master --info*".
|
92
|
+
|
93
|
+
*-k, --keep*::
|
94
|
+
Don't do any "cleanup." It keeps the current local and remote branches, and does
|
95
|
+
not close any outstanding pull requests.
|
96
|
+
|
97
|
+
*--info*::
|
98
|
+
Informational messages; show the major things this is doing (*default: true*)
|
99
|
+
|
100
|
+
*-q, --quiet*::
|
101
|
+
Quiet messages; only show errors
|
102
|
+
|
103
|
+
*-v, --verbose*::
|
104
|
+
Verbose messages; show lots of details on what this is doing
|
105
|
+
|
106
|
+
*--version*::
|
107
|
+
Print version and exit
|
108
|
+
|
109
|
+
|
110
|
+
CONFIGURATION
|
111
|
+
-------------
|
112
|
+
|
113
|
+
Options for 'git-to-master(1)' are set using 'git-config(1)'.
|
114
|
+
|
115
|
+
*gitProcess.remoteName*::
|
116
|
+
Allows you to explicitly set the remote server name to use. Defaults
|
117
|
+
to the first server name reported by 'git-remote(1)' (which is
|
118
|
+
typically "origin" since most projects have a single remote).
|
119
|
+
|
120
|
+
*gitProcess.integrationBranch*::
|
121
|
+
Allows you to explicitly set the integration branch to use. Defaults
|
122
|
+
to "master".
|
123
|
+
|
124
|
+
*gitProcess.github.authtoken*::
|
125
|
+
Not meant to be set manually, this is the OAuth token used to communicate
|
126
|
+
with the GitHub server. If it is not set, the user will be prompted for their credentials.
|
127
|
+
|
128
|
+
*github.user*::
|
129
|
+
If OAuth needs to prompt for credentials, if this value is set then it is
|
130
|
+
used as the username. Otherwise it is unused.
|
131
|
+
|
132
|
+
|
133
|
+
CONTROL FILES
|
134
|
+
-------------
|
135
|
+
|
136
|
+
*gitprocess-sync-\***--**::
|
137
|
+
To help make the process simpler and more reliable, 'git-to-master(1)' will
|
138
|
+
read a file in the "'.git'" directory that contains the SHA-1 of the last
|
139
|
+
successful sync to the server. (See 'git-sync(1)'.) As part of its normal
|
140
|
+
"housekeeping" 'git-to-master(1)' will remove the file if *--keep* is not
|
141
|
+
specified.
|
142
|
+
|
143
|
+
|
144
|
+
GITHUB SUPPORT
|
145
|
+
--------------
|
146
|
+
|
147
|
+
To know which GitHub URL to use for pull-request support, the value of
|
148
|
+
'gitProcess.remoteName' is resolved to the underlying server name/IP. (That includes
|
149
|
+
"aliased" names in a 'ssh_config(5)' file.) If it's github.com, then the public
|
150
|
+
GitHub.com API is used. Otherwise it's assumed that the server is GitHub Enterprise
|
151
|
+
and that set of URLs is used.
|
152
|
+
|
153
|
+
|
154
|
+
SEE ALSO
|
155
|
+
--------
|
156
|
+
|
157
|
+
*git-process*(1), *git-sync*(1), *git-new-fb*(1), *git-pull-request*(1)
|
158
|
+
|
159
|
+
|
160
|
+
BUGS
|
161
|
+
----
|
162
|
+
Known bug list: <https://github.com/jdigger/git-process/issues?state=open>
|
163
|
+
|
164
|
+
|
165
|
+
AUTHOR
|
166
|
+
------
|
167
|
+
git-to-master has been written primarily by Jim Moore.
|
168
|
+
|
169
|
+
|
170
|
+
RESOURCES
|
171
|
+
---------
|
172
|
+
Main web site: <https://github.com/jdigger/git-process>
|