From Wiki
Revision as of 20:52, 20 October 2016 by Admin (Talk | contribs) (Git Notes)

Jump to: navigation, search

Git Notes

Useful git config settings:

git config --global checkout
git config --global branch
git config --global commit
git config --global status
git config --global alias.pof push origin force
git config --global status.showUntrackedFiles all
git config --global color.ui true
git config --global push.default simple

Generate log report. What did I do this week?

git log --pretty=format:"* %B%n" --since=1.weeks --author User\ Name

Amend last commit. Avoid amending commits that have been pushed.

git commit --amend

See changes from a commit:

git diff COMMIT^!

Delete remote branch:

As of Git v1.7.0, you can delete a remote branch using

git push origin --delete <branchName>

which is easier to remember than

git push origin :<branchName>

Clone remote branch:

git clone -b my-branch <origin>

Set origin

git remote set-url origin 

Roll back to previous commit:

git reset <commit>

To discard the current working directory use the --hard option.

git reset --hard <commit>

Set up initial repo for push.

You will need to set up an empty directory and then initialize it to store git data.

 mkdir newproject
 cd newproject
 git init

Now push from your *source* repo.

 git push master

Stop tracking a file. This removes the file from version control while keeping it in the working repository.

git rm --cached <file>

Cherry pick commit from another branch:

git cherry-pick <id>

Switch upstream branch:

git branch -m master production
git push --set-upstream origin production

To change the default branch for new clones you will need to create a symbolic ref.

git --git-dir /path/to/bare/repo symbolic-ref HEAD refs/heads/production

Gitweb Installation

git includes a cgi script which can be used to browse git repositories. To set this up first install the packages:

yum -y install gitweb httpd

Edit the apache config file to enable name based virtual hosts. Uncomment the line that says "NameVirtualHost *:80".

Set up a default virtual host. For example, add these lines to httpd.conf.

<VirtualHost *:80>
    DocumentRoot /var/www/html

Next edit the /etc/httpd/conf.d/git.conf config file for gitweb.

<VirtualHost *:80>
SuexecUserGroup git git
DocumentRoot /var/www/gitweb

SetEnv GITWEB_CONFIG  /etc/gitweb.conf
SetEnv GIT_PROJECT_ROOT /home/git/repositories
ScriptAlias /git/ /var/www/gitweb/gitweb.cgi/

# Logfiles
ErrorLog  /var/log/httpd/gitweb.error.log
CustomLog /var/log/httpd/gitweb.access.log combined

<Directory /var/www/gitweb>
    Options +ExecCGI +FollowSymLinks
    AddHandler cgi-script .cgi
    DirectoryIndex gitweb.cgi

    # Pretty gitweb URLs
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^.* /gitweb.cgi/$0 [L,PT]

    Order Deny,Allow
    Deny from all
    Allow from

# Enable git clone over HTTP - does not work
ScriptAliasMatch \
          "(?x)^/(.*/(HEAD | \
          info/refs | \
          objects/(info/[^/]+ | \
          [0-9a-f]{2}/[0-9a-f]{38} | \
          pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
          git-(upload|receive)-pack))$" \

Since we are using suexec the gitweb files must be copied into the default document root.

rsync -avHl /usr/share/gitweb/ /var/www/gitweb/
chown -R git:git /var/www/gitweb/

Restart apache.

Edit /etc/gitweb.conf to customize gitweb for your environment.

# path to git projects (.git)
$projectroot = "/home/git/repositories";

#uncomment this to display URLs for cloning
#@git_base_url_list = ("git://", "");

# directory to use for temp files
$git_temp = "/tmp";

$site_name = "";

# require export flag
$export_ok = "git-daemon-export-ok";
$strict_export = 1;

# target of the home link on top of all pages
#$home_link = $my_uri || "/";

# html text to include at home page
#$home_text = "indextext.html";

# file with project list; by default, simply scan the projectroot dir.
#$projects_list = $projectroot;

# stylesheet to use
#$stylesheet = "gitweb.css";

# javascript code for gitweb
#$javascript = "gitweb.js";

# logo to use
#$logo = "git-logo.png";

# the 'favicon'
#$favicon = "git-favicon.png";

# enable git blame
$feature{'blame'}{'default'} = [1];

# enable pickaxe search
$feature{'pickaxe'}{'default'} = [1];

# enable snapshot downloads
$feature{'snapshot'}{'default'} = ['zip', 'tgz'];

# enable syntax highlighting
$feature{'highlight'}{'default'} = [1];

# enable pretty URLs
$feature{'pathinfo'}{'default'} = [1];