A PCRE internal error occured. This might be caused by a faulty plugin

====== Differences ====== This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
packages:git [2013/12/17 14:55]
admin
packages:git [2015/05/24 18:45] (current)
admin [Creating Your Local git Copy]
Line 1: Line 1:
 ====== GIT Distributed Version Control ====== ====== GIT Distributed Version Control ======
 If you do not know GIT by now, you've probably been away from the software development ecosystem for a while... or you're very new to it. If that is the case, it is warmly recommended that you learn more about this great tool for version control in distributed environments. You can get a quick impression of what GIT is by reading this [[http://​git-scm.com/​about|introduction on the official GIT website]]. If you do not know GIT by now, you've probably been away from the software development ecosystem for a while... or you're very new to it. If that is the case, it is warmly recommended that you learn more about this great tool for version control in distributed environments. You can get a quick impression of what GIT is by reading this [[http://​git-scm.com/​about|introduction on the official GIT website]].
 +
 +----
 +==== Installation of the Git Package (client) ====
 +----
 +For comprehensive information regarding git, please refer to the [[http://​git-scm.com/​documentation|official git documentation]].
 +
 +As long as you satisfy yourself with the latest Git release available from the debian repos you could simply issue the following command to install it on your system:
 +<​code>​
 +sudo apt-get update
 +sudo apt-get install git
 +</​code>​
 +
 +In case you'd like to benefit from the very latest additions made to Git, you should then [[http://​git-scm.com/​book/​en/​Getting-Started-Installing-Git|install Git from sources]]
 +
 +----
 +==== Server Side Install ====
 +----
 +<​code>​
 +> sudo apt-get update
 +> sudo apt-get install git
 +</​code>​
 +
 +=== Create git user and repository ===
 +<​code>​
 +> sudo adduser git
 +Adding user `git' ...
 +Adding new group `git' (1001) ...
 +Adding new user `git' (1001) with group `git' ...
 +Creating home directory `/​home/​git'​ ...
 +Copying files from `/​etc/​skel'​ ...
 +Enter new UNIX password: ​
 +Retype new UNIX password: ​
 +passwd: password updated successfully
 +Changing the user information for git
 +Enter the new value, or press ENTER for the default
 + Full Name []: 
 + Room Number []: 
 + Work Phone []: 
 + Home Phone []: 
 + Other []: 
 +Is the information correct? [Y/n] Y
 +</​code>​
 +
 +Create the main repository for git projects:
 +<​code>​
 +> su git
 +> cd $HOME
 +> mkdir <​git-projects>​
 +> chmod 2775 <​git-projects>​
 +</​code>​
 +
 +Change the umask for users having **/​home/​git** as home:
 +<​code>​
 +> su git
 +> nano .profile
 +
 +CHANGE:
 +# the default umask is set in /​etc/​profile;​ for setting the umask
 +# for ssh logins, install and configure the libpam-umask package.
 +umask 0002
 +</​code>​
 +
 +The umask controls the default file creation permissions,​ 0002 means files will have 664 and directories 775. Setting this, by editing the umask line in **/​etc/​profile** in our case, means files created by one user will be writable by other users in the git group without needing to chmod them.
 +
 +This solution was inspired by [[http://​serverfault.com/​questions/​6895/​whats-the-best-way-of-handling-permissions-for-apache2s-user-www-data-in-var|this post on serverfault.com]].
 +
 +=== Add shell users ===
 +Create gitusers, members of the git group and having **/​home/​git** as home
 +<​code>​
 +> sudo adduser <​gituser>​
 +> sudo passwd <​gituser>​
 +> sudo usermod -a -G git <​gituser>​
 +> sudo usermod -d /home/git <​gituser>​
 +</​code>​
 +
 +=== Using RSA keys for login ===
 +To avoid having to enter a password each time the <​gituser>​ logs in to the server, we'll register it's public RSA id key into the **.ssh/​authorized_keys** file:
 +
 +First you'll have to receive the public from each one of your intended users. The public key of a user generally resides in a pair of files, under your **$HOME/​.ssh** directory, named something and something.pub,​ where the something is usually id_dsa or id_rsa. The .pub file is your public key, and the other file is your private key. If you don’t have these files (or you don’t even have a .ssh directory), you can create them by running a program called ssh-keygen, which is provided with the SSH package on Linux/Mac systems and comes with the MSysGit package on Windows:
 +
 +To create a new pair of keys (on your local machine):
 +<​code>​
 +> mkdir $HOME/.ssh
 +> cd $HOME/.ssh
 +> ssh-keygen
 +</​code>​
 +
 +Then copy the content of the **$HOME/​.ssh/​id_rsa.pub** file to the **/​home/​git/​.ssh/​authorized_keys** file on the server.
 +
 +The user should now be able to login to the server using ssh without having to enter a password.
 +----
 +==== Creating a Shared git Project Repository ====
 +----
 +Login to the server and init a bare repository:
 +<​code>​
 +> ssh <​gituser>​@my.server.tld
 +> cd /​home/​git/<​git-projects>​
 +> mkdir <​project-name.git>​
 +> cd <​project-name.git>​
 +> git init --bare
 +</​code>​
 +
 +=== Create hooks ===
 +git automates execution of shell scripts before or after execution of specified operations, have a look inside your project'​s "​bare"​ git repository, and look at what's inside the <​project-name.git>/​hooks directory...
 +
 +An example of what can be achieved using these scripts is to checkout the latest committed version to a specific directory right after each commit:
 +<​code>​
 +> nano hooks/​post-receive
 +
 +WRITE:
 +#!/bin/sh
 +GIT_WORK_TREE=/​var/​www/​www.mysite.com/​web git checkout -f
 +
 +> chmod +x hooks/​post-receive
 +</​code>​
 +
 +----
 +==== Creating Your Local git Copy ====
 +----
 +
 +<​code>​
 +> cd /​home/<​username>/​path/​to/​project
 +> git init
 +> git remote add <​staging>​ <​gituser>​@my.server.tld:/​home/​git/<​git-projects>/<​project-name.git>​
 +> git add <​file1>​ <​file2>​ <​dir/​*>​
 +> git commit -m <"​Initial commit">​
 +> git push <​staging>​ +master:​refs/​heads/​master
 +</​code>​
 +
 +To update an existing remote:
 +
 +<​code>​
 +> git remote set-url <​staging>​ <​gituser>​@my.newserver.tld:/​home/​git/<​git-projects>/<​project-name.git>​
 +</​code>​
 +
 +----
 +
 +==== Useful Git Commands ====
 +----
 +It isn't in the scope of this article to help you learn Git, although here are a few commands that prove themselves useful in the course of my development experience
 +
 +<wrap todo>TO BE COMPLETED</​wrap>​