Git: Difference between revisions
remove template |
|||
| (4 intermediate revisions by the same user not shown) | |||
| Line 4: | Line 4: | ||
See [[Git/hacks]] for example commands | See [[Git/hacks]] for example commands | ||
{{Subpages|}} | |||
== Intro to Git == | == Intro to Git == | ||
| Line 24: | Line 26: | ||
== Initial Configuration == | == Initial Configuration == | ||
In your [https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup first time setting up Git on a new computer], you want to configure your username and email among other settings. | In your [https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup first time setting up Git on a new computer], you want to configure your username and email among other settings. | ||
< | <syntaxhighlight lang="bash"> | ||
git config --global user.name "Greg Rundlett" | git config --global user.name "Greg Rundlett" | ||
git config --global user.email greg@freephile.com | git config --global user.email greg@freephile.com | ||
| Line 32: | Line 34: | ||
# store password in memory for an hour | # store password in memory for an hour | ||
git config --global credential.helper 'cache --timeout=3600' | git config --global credential.helper 'cache --timeout=3600' | ||
git config --global push.autoSetupRemote true | |||
# recent packaged versions of git might be 1.8.3.1 (CentOS 7.4) whereas the current available is 2.15.1 | # recent packaged versions of git might be 1.8.3.1 (CentOS 7.4) whereas the current available is 2.15.1 | ||
| Line 39: | Line 41: | ||
# and adopt the new behavior now, use: | # and adopt the new behavior now, use: | ||
git config --global push.default simple | git config --global push.default simple | ||
</ | </syntaxhighlight> | ||
=== Example .gitconfig === | === Example .gitconfig === | ||
<code>git config --global -e</code> and paste in the following: | <code>git config --global -e</code> and paste in the following: | ||
< | <syntaxhighlight lang="ini"> | ||
[user] | [user] | ||
name = Greg Rundlett | name = Greg Rundlett | ||
| Line 97: | Line 99: | ||
# browser = google-chrome | # browser = google-chrome | ||
browser = firefox | browser = firefox | ||
</ | </syntaxhighlight> | ||
{{Highlight | {{Highlight | ||
| Line 103: | Line 105: | ||
== Decentralized Workflow and Branching Model == | == Decentralized Workflow and Branching Model == | ||
Now known as the "'''Git Flow'''" model. When using git for software development where you maintain long-running branches for various supported product versions and also work on the 'next' release in sprints or some development cadence, you need to use this model. '''Git Flow''' is a successful branching model for development, "main", release branches, hotfixes, etc. See https://nvie.com/posts/a-successful-git-branching-model/ | |||
In contrast, the 'GitHub Flow' model where you really only ever have one product that marches forward, the focus is on a simplified fork (branch) and Pull Request (PR) approach. This simplified model is more appropriate for simple products like documentation or a website. | |||
== Submodules == | == Submodules == | ||
Using multiple repositories to compose your project. See https://git-scm.com/book/en/v2/Git-Tools-Submodules | Using multiple repositories to compose your project. See https://git-scm.com/book/en/v2/Git-Tools-Submodules | ||
< | <syntaxhighlight lang="bash"> | ||
git init myproject | git init myproject | ||
cd myproject | cd myproject | ||
| Line 134: | Line 135: | ||
git config alias.spush 'push --recurse-submodules=on-demand' | git config alias.spush 'push --recurse-submodules=on-demand' | ||
git config alias.supdate 'submodule update --remote --merge' | git config alias.supdate 'submodule update --remote --merge' | ||
</ | </syntaxhighlight> | ||
== Tools == | == Tools == | ||
| Line 144: | Line 145: | ||
== Reporting == | == Reporting == | ||
How many lines have I contributed since last year? | How many lines have I contributed since last year? | ||
< | <syntaxhighlight lang="bash"> | ||
git log --stat --author $(git config --get user.email) --since="last year" --until="last month" | awk -F',' '/files? changed/ { | git log --stat --author $(git config --get user.email) --since="last year" --until="last month" | awk -F',' '/files? changed/ { | ||
files += $1 | files += $1 | ||
| Line 158: | Line 159: | ||
}' | }' | ||
</ | </syntaxhighlight> | ||
== Visualizing == | == Visualizing == | ||
| Line 225: | Line 226: | ||
Generally following the series of instructions at | Generally following the series of instructions at | ||
http://vafer.org/blog/20080115011413 I installed Git-core, gitweb and gitosis on the host | http://vafer.org/blog/20080115011413 I installed Git-core, gitweb and gitosis on the host | ||
< | <syntaxhighlight lang="bash"> | ||
# install git, the git-svn tool and the viewvc equivalent | # install git, the git-svn tool and the viewvc equivalent | ||
apt-get install git-core git-svn gitweb | apt-get install git-core git-svn gitweb | ||
| Line 305: | Line 306: | ||
# and install it | # and install it | ||
apt-get install gitosis | apt-get install gitosis | ||
</ | </syntaxhighlight> | ||