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.
Both sides previous revision Previous revision Next revision | Previous revision | ||
packages:git [2013/12/17 15:01] admin [Installation of the GIT Package] |
packages:git [2015/05/24 18:45] (current) admin [Creating Your Local git Copy] |
||
---|---|---|---|
Line 2: | Line 2: | ||
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 ==== | + | ---- |
+ | ==== 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: | 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> | <code> | ||
Line 8: | Line 12: | ||
sudo apt-get install git | sudo apt-get install git | ||
</code> | </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> |