Git

From Wiki

Create repository (on server)

git init
git init --bare

Initial checkout of remote repository

git clone https://gerrit.wikimedia.org/r/p/mediawiki/core.git
git clone ssh://user@server/srv/git/git-repo.git

Get latest updates from server

git pull
(git fetch && git merge)

Change files and commit

  • show changed files
git diff --cached --name-only
git diff --name-status
  • add files
git add *
  • commit changes
git commit -m "Commit-Nachricht"
git commit -a                      # includes add
git commit -am.
  • send changes to server
git push


move repo to new server

on client:
git remote set-url origin <URL to my NEW repo location>
git push -f origin

sparse clone (only specific folder)

mkdir <repo>
cd <repo>
git init
git remote add -f origin <url>
git config core.sparseCheckout true
echo "some/dir/" >> .git/info/sparse-checkout
git pull origin master


hard reset to specific branch

git fetch --all
git reset --hard origin/branchname

Configuration

  • post-receive hook (execute script on main git server, after receiving push): hooks/post-receive
#!/bin/bash
# unset GIT_INDEX_FILE # not needed for post-receive?
git --work-tree=/srv/targetfolder --git-dir=/home/demo/proj/.git checkout -f
or
#!/bin/bash
while read oldrev newrev ref
do
    if [[ $ref =~ .*/master$ ]];
    then
        echo "Master ref received.  Deploying master branch to production..."
        git --work-tree=/var/www/html --git-dir=/home/demo/proj checkout -f
    else
        echo "Ref $ref successfully received.  Doing nothing: only the master branch may be deployed on this server."
    fi
done
  • make executable
chmod +x post-receive


Special features

  • auto-commit when file changes
inotifywait -q -m -e CLOSE_WRITE --format="git commit -a -m 'autocommit on change' %w" file.txt | sh
or
while true; do
  inotifywait -qq -e CLOSE_WRITE ~/.calendar/calendar
  cd ~/.calendar; git commit -a -m 'autocommit on change'
done
# inotify "-r"  for recursive
or
  • etckeeper
or

Links