====== General Git Topics ======
==== Basic Config ====
git config --global user.name 'Your Name'
git config --global user.email 'your@email.com'
git config --global core.pager 'less -x3r'
git config --global diff.tool 'vimdiff'
git config --global diff.guitool 'gvimdiff'
git config --global difftool.prompt 'false'
git config --global http.sslverify 'false'
==== Some history/view tips ====
* Show files involved in a particular commit: git diff-tree --no-commit-id --name-only -r commitid
* Show basic history for a file:git log --all -- path/to/file.ext
* Show all pull/push activity:git reflog show --date=iso origin/master
* Show commit hash and commentgit log --abbrev-commit --pretty=oneline 228d0ae de36d78
git log --pretty=oneline 228d0ae de36d78
* Show everything in the commit for hashgit show d9ekhg9alk239d94dkd949dksc0dkgkls90fds93
* Show commit info for hashgit show d9ekhg9alk239d94dkd949dksc0dkgkls90fds93 | head -6
* Show files changed for commitgit show d9ekhg9alk239d94dkd949dksc0dkgkls90fds93 | grep "^diff --git"
==== Rename a tag ====
git tag new old
git tag -d old
git push origin :refs/tags/old
git push --tags
// The colon in the push command removes the tag from the remote repository. If you don't do this, git will create the old tag on your machine when you pull. // \\
\\
Ensure that the other developers/users remove the deleted tag by running the following command:
git pull --prune --tags
\\
------
====== GitLab ======
==== Import Project into Gitlab ====
git clone --mirror https://github.com/you/prj
cd prj.git
# HTTP URL http://gitlab.example.com/you/prj.git
git remote add gitlab git@git.albertleadata.org:you/prj.git
git push gitlab --mirror
# Switch local clone to new repo:
git remote remove origin
git remote add origin git@git.albertleadata.org:you/prj.git
git fetch --all
\\
------
====== Github ======
===== Manage your fork's sync with upstream =====
* Add the remote, call it "upstream":git remote add upstream https://github.com/whoever/whatever.git
* Fetch all the branches of that remote into remote-tracking branches, such as upstream/master:git fetch upstream
* Make sure that you're on your master branch:git checkout master
* Rewrite your master branch so that any commits of yours that aren't already in upstream/master are replayed on top of that other branch:git rebase upstream/master
//Alternately, you could do a ''git merge upstream/master'', but a rebase is most sane, especially for keeping pull requests well-behaved //
====== Advanced Topics ======
===== Locking master branch =====
* In ./git/hooks/update before section # --- Config:
if [ "$refname" == "refs/heads/master" ]; then
if [ "$USER" != "" ]; then
echo "POLICY: you are not allowed to change the master branch !"
exit 1
else
echo "POLICY: $USER allowed to change the master branch ..."
fi
fi
* ''git config receive.denyCurrentBranch ignore''
* Edit .git/description
====== Miscellaneous Topics ======
===== Set active branch in bare repo =====
''git symbolic-ref HEAD refs/heads/thebranch''
===== Installing git-lfs on Ubuntu =====
* Some basic pre-requisites: apt install software-properties-common
* Set up repository: curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash
* Install from repository: apt install git-lfs
* Each user will need to do: ''git lfs install''
===== Git Service over HTTP/HTTPS =====
==== ... for Apache ====
First //(as root)//:
mkdir -p /var/www/git
chown msamud1:apache /var/www/git
chmod 2750 /var/www/git
chcon -t httpd_sys_content_t /var/www/git
Then, create auth file with something like: ''htpasswd -c /var/www/git/.htpasswd git'' //... prompted for password//
=== For anonymous read/write ... ===
In ''/etc/httpd/conf.d/git.conf'':
# Git-smart HTTP/HTTPS back-end
SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
Options +ExecCGI
Require all granted
Order allow,deny
Allow from all
=== ... or, for anonymous read and authenticated write ... ===
In ''/etc/httpd/conf.d/git.conf'':
# Git-smart HTTP/HTTPS back-end
SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
Options +ExecCGI
Require all granted
Order allow,deny
AuthType Basic
AuthName "Git Access"
AuthUserFile /var/www/git/.htpasswd
Require valid-user
# Require group committers
=== ... or, for authenticated read/write ... ===
In ''/etc/httpd/conf.d/git.conf'':
# Git-smart HTTP/HTTPS back-end
SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
Options +ExecCGI
Order deny,allow
AuthType Basic
AuthName "Private Git Access"
AuthUserFile /var/www/git/.htpasswd
Require valid-user
=== ... or, for LDAP authentication ... ===
Ensure ''mod_ldap'' is installed, then in ''/etc/httpd/conf.d/git.conf'':
Options +ExecCGI
Order deny,allow
AuthType Basic
AuthName "Private Git Access"
AuthBasicProvider ldap
AuthLDAPURL "ldap://cosmos.samudio.net/dc=samudio,dc=net?uid?sub?"
Require valid-user
=== ... Active Directory AuthLDAPURL ... ===
AuthLDAPURL "ldap://ad-ldap-prod.uhc.com/dc=ms,dc=ds,dc=uhc,dc=com?sAMAccountName?sub?(objectCategory=person)(objectClass=user)"
=== ... add specific location auth ... ===
... add same LDAP constructs, except for ...
Require ldap-attribute sAMAccountName="yourlogin"
\\
// Links: [[tech:start|Tech Info]] ... [[tech:devops:start|Devops Info]] // \\