Rabu, 06 Agustus 2014

Membuat server GIT sendiri dan contoh penggunaannya

Kenapa harus membuat server Git sendiri?

Git pada masa ini seperti tools wajib bagi para pekerja dibidang software. Requirement pekerjaan senantiasa selalu meyertakan Git. Perusahaan-perusahaan besar seperti Google, Facebook, Microsoft, Twitter, Linkedin sudah terlebih dahulu menggunakan Git sebagai Sistem Version Control.

Menggunakan Git untuk membuat software open bisa dilakukan dengan membuat repository open pada github.com dan pekerjaan ini relatif cukup mudah karena server sudah ditangani oleh github.com sehingga developer hanya perlu memikirkan local repository. Menggunakan github versi berbayarpun dapat mencegah code dapat diakses pada project non-open. Tetapi pada project yang sangat private, atau developer dengan modal pas-pasan, alasan tertentu lainnya bisa memilih menginstall Git pada server sendiri.

Berikut adalah beberapa keuntungan yang didapatkan dengan membuat Git server;
1. IRIT!
2. Melindungin privacy project,
3. Project dapat dikelola dengan baik,
4. Software dapat dikerjakan dari mana saja,
5. Bebas menentukan berapa anggota tim,
6. Dapat bekerja kolaborasi.

Disamping keuntungan tersebut, ada kekurangannya yaitu Git pada server sendiri tidak memiliki GUI sehingga setiap anggota tim harus mengetahui dan memahami syntax-nya.


Berikut adalah cara membuat server Git sendiri dan contoh penggunaannya;


Setting server dan bare repository

1. Install
Untuk Ubuntu/Debian:
$ sudo apt-get install git

Untuk CentOS/Fedora:
$ sudo yum install git


2. Global config email dan nama

$ git config --global user.email "you@email.com"

$ git config --global user.name "Your Name"



3. Buat folder repository Anda

$ mkdir repository


4. Berpindah pada project

$ cd repository


5. Sebuah remote repository pada server biasanya tidak membutuhkan working tree. Git repository tanpa working tree dinamakan dengan bare repository. Berikut adalah command untuk membuat bare repository;

~/repository$ git init --bare project01.git
Initialized empty Git repository in /home/your_name/repository/project01.git/

Project direktori akan terlihat seperti ini
[home]
    [your_name]
        [repository]
            [project01.git]
                [branches]
                [hooks]
                [folder_lain]
                config
                description
                HEAD


Catatan penting; pemanggilan bare repository ini berlaku relatif terhadap user path.

Sebagai contoh;
- Jika Anda membuat bare repository pada /home/your_name/Documents/repository/project01.git maka Anda harus cloning berdasarkan path tersebut.

$ git clone your_name@your_server.com:Documents/repository/project01.git


Hasil direktori yang Anda dapat seperti berikut
[folder_tempat_anda_meng_cloning]
    [project01]

     

Local Computer dan cara memanggil Git

Ada beberapa cara untuk bekerja pada local computer;

1. Cloning
Perintah cloning secara default akan memberikan repository origin
Perintah cloning adalah seperti berikut
$ git clone your_name@your_server.com:repository/project01.git
Cloning into 'project01'...
warning: You appear to have cloned an empty repository.

1.1. Untuk bekerja, maka Anda harus berpindah pada folder project01
$ cd project01
~/project01$

1.2. Berikut saya menambahkan ilustrasi pada command line dengan ### sebagai command yang tentunya tidak ada pada perintah command line

### buat sebuah file
~/project01$ echo "ini isi file index" > index.html


### add, list directory, commit, push
~/project01$ git add .
~/project01$ git commit -m "file pertama dari perintah cloning"
[master (root-commit) 42d2e1f] file pertama dari perintah cloning
 1 file changed, 1 insertion(+)
 create mode 100644 index.html
~/project01$ ls
index.html
~/project01$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 230 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To youer_name@your_server.com:repository/project01.git
 * [new branch]      master -> master
~/project01$


1.3. File config Git pada perintah cloning adalah sebagai berikut;

[core]
 repositoryformatversion = 0
 filemode = true
 bare = false
 logallrefupdates = true
[remote "origin"]
 fetch = +refs/heads/*:refs/remotes/origin/*
 url = your_name@your_server.com:repository/project01.git
[branch "master"]
 remote = origin
 merge = refs/heads/master



2. Init

Sebenarnya untuk point 2.1 dan 2.2 mempunyai perintah yang sama persis. Tetapi untuk ilustrasi, saya akan sertakan sebagai contoh agar Anda dapat melihat syntax-nya.

2.1. Memberikan init dan nama origin

### buat direktory
$ mkdir project01_init_origin

### berpindah direktory
$ cd project01_init_origin/

### perintah git init dilanjutkan dengan git remote add origin
~/project01_init_origin$ git init && git remote add origin your_name@your_server.com:repository/project01.git
Initialized empty Git repository in /home/your_name/project01_init_origin/.git/

### menarik file dari your_server.com
~/project01_init_origin$ git pull origin master
remote: Counting objects: 3, done.
Unpacking objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
From your_server.com:repository/project01
 * branch            master     -> FETCH_HEAD

### menampilkan isi file
~/project01_init_origin$ ls
index.html

### membuat file baru
~/project01_init_origin$ echo "isi file init_origin" > init_origin.html
~/project01_init_origin$ ls
index.html  init_origin.html

### add
~/project01_init_origin$ git add .

### commit
~/project01_init_origin$ git commit -m "adding file init_origin"
[master 25a40fb] adding file init_origin
 1 file changed, 1 insertion(+)
 create mode 100644 init_origin.html

### push
~/project01_init_origin$ git push origin master
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 307 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To your_name@your_server.com:repository/project01.git
   42d2e1f..25a40fb  master -> master


~/project01_init_origin$ 


Git config akan terlihat seperti ini
[core]
 repositoryformatversion = 0
 filemode = true
 bare = false
 logallrefupdates = true
[remote "origin"]
 url = your_name@your_server.com:repository/project01.git
 fetch = +refs/heads/*:refs/remotes/origin/*


2.2. Memberikan init dan nama repolainnya
### buat folder
$ mkdir project01_init_repolainnya
$ cd project01_init_repolainnya/


### init dan lanjutkan dengan add repolainnya
~/project01_init_repolainnya$ git init && git remote add repolainnya your_name@your_server.com:repository/project01.git
Initialized empty Git repository in /home/your_name/project01_init_repolainnya/.git/


### pull 
~/project01_init_repolainnya$ git pull repolainnya master
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From your_server.com:repository/project01
 * branch            master     -> FETCH_HEAD


### list file
~/project01_init_repolainnya$ ls
index.html  init_origin.html


### buat file baru
~/project01_init_repolainnya$ echo "isi file repolainnya" > init_repolainnya.html
~/project01_init_repolainnya$ ls
index.html  init_origin.html  init_repolainnya.html


### add, commit
~/project01_init_repolainnya$ git add .
~/project01_init_repolainnya$ git commit -m "penambahan file init_repolainnya.html"
[master 77400e8] penambahan file init_repolainnya.html
 1 file changed, 1 insertion(+)
 create mode 100644 init_repolainnya.html


### push
~/project01_init_repolainnya$ git push repolainnya master
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 351 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To your_project@your_server.com:repository/project01.git
   25a40fb..77400e8  master -> master


~/project01_init_repolainnya$ 


Git config akan terlihat seperti berikut
[core]
 repositoryformatversion = 0
 filemode = true
 bare = false
 logallrefupdates = true
[remote "repolainnya"]
 url = your_name@your_server.com:repository/project01.git
 fetch = +refs/heads/*:refs/remotes/repolainnya/*


Catatan penting: Untuk membagi git ini dengan orang lain, maka pada repository perlu di set permission 777 atau dengan memberikan user group atau dengan shared repository
$ git init --bare --shared mygit.git



Sumber liannya untuk belajar Git;
- http://git-scm.com/
- http://git-scm.com/book/id
- https://try.github.io/levels/1/challenges/1
- http://www.vogella.com/tutorials/Git/article.html