saat ini saya telah menggunakan SVN dalam pengembangan program.
SVN sangat membantu dalam kerja team karena menggunakan central
repository sehingga tidak perlu lempar2an source code via attachment email.
saat ini saya hanya membuat satu folder aja sebagai root directory dari
aplikasi saya.
saya tahu ada konsep lain seperti branch, tag, and trunk, tapi saya ngak
terlalu paham fungsinya. jadi cuma buat 1 directory aja. fungsi yang
dipakai pun juga sederhana
yang saya tanyakan, seperti apa best practices SVN? apakah metode saya
cukup, atau akan bermasalah dikemudian hari? selama ini sih masih
aman-aman aja kliatannya.
selain SVN apakah ada alternatif lain yang lebih baik?
jika ada, bisa dijelaskan dari sisi mana kelebihannya?
salam untuk semua
On Fri, 2012-03-09 at 09:16 +0700, Achmad Mardiansyah wrote:
> dear rekan2 sekalian,
>
> saat ini saya telah menggunakan SVN dalam pengembangan program.
> SVN sangat membantu dalam kerja team karena menggunakan central
> repository sehingga tidak perlu lempar2an source code via attachment email.
>
> saat ini saya hanya membuat satu folder aja sebagai root directory dari
> aplikasi saya.
> saya tahu ada konsep lain seperti branch, tag, and trunk, tapi saya ngak
> terlalu paham fungsinya. jadi cuma buat 1 directory aja. fungsi yang
> dipakai pun juga sederhana
> yang saya tanyakan, seperti apa best practices SVN? apakah metode saya
> cukup, atau akan bermasalah dikemudian hari? selama ini sih masih
> aman-aman aja kliatannya.
Mencoba menjawab pertanyaan, *trunk* ini digunakan sebagai tempat
penyimpanan source code dengan status terkini.
Sedangkan *branch* biasanya digunakan klo misalkan kita ingin melakukan
perubahan pada source code terkini, tapi perubahan tersebut tidak ingin
di integrasikan langsung ke trunk. Biasanya sih untuk fitur2x yang masih
coba-coba.
Sedangkan *tag* digunakan klo biasanya kita merilis versi ke x dan ingin
menandai revisi dimana versi x ini dirilis.
>
> selain SVN apakah ada alternatif lain yang lebih baik?
> jika ada, bisa dijelaskan dari sisi mana kelebihannya?
>
> salam untuk semua
DVCS (Decentralized Version Control) (ex: Git, Bazaar, Mercurial,
etc[1]) ?? Bedannya dengan SVN yaitu, klo DVCS ini dia ga terpusat, klo
server utama lagi mati kita bisa jadiin laptop personel team kita
sebagai remote url.
Selain itu, jika kita sedang ga ada koneksi internet. Kita masih bisa
nge-add dan commit. Sedangkan nanti ketika kita sudah dapat koneksi
internet, baru perubahan yang sudah dicommit bisa kita kirim ke
server.Jadi apapun kondisinya tetep bisa kerja, dengan tenang :)
Yang menurut saya keren di git yaitu, merge-nya antar source codenya
enak banget :)
Sedangkan klo SVN, jika server utama mati kita jadi ga bisa kerja.
Ada yang mau nambahin ?
Note:
- Maaf iklan, kalau mau panduan SVN di artivisi jual buku-nya yang nulis
pak Endy sendiri :)
[1] http://en.wikipedia.org/wiki/List_of_revision_control_software
untuk metode copy antara branch, trunk & tag, bisa pake copy paste gitu
atau gimana yah?
katakan bikin branch baru, berarti kita copy semua source code itu ke
directory branch yang baru dibuat itu kan yah? trus pada dreamweaver
kita, path SVN harus diganti lagi dong?
konsep branch, trunk & tag ini apakah general atau hanya di svn aja?
>
>> >
>> > selain SVN apakah ada alternatif lain yang lebih baik?
>> > jika ada, bisa dijelaskan dari sisi mana kelebihannya?
>> >
>> > salam untuk semua
>>
> DVCS (Decentralized Version Control) (ex: Git, Bazaar, Mercurial,
> etc[1]) ?? Bedannya dengan SVN yaitu, klo DVCS ini dia ga terpusat, klo
> server utama lagi mati kita bisa jadiin laptop personel team kita
> sebagai remote url.
>
> Selain itu, jika kita sedang ga ada koneksi internet. Kita masih bisa
> nge-add dan commit. Sedangkan nanti ketika kita sudah dapat koneksi
> internet, baru perubahan yang sudah dicommit bisa kita kirim ke
> server.Jadi apapun kondisinya tetep bisa kerja, dengan tenang:)
>
> Yang menurut saya keren di git yaitu, merge-nya antar source codenya
> enak banget:)
>
> Sedangkan klo SVN, jika server utama mati kita jadi ga bisa kerja.
>
>
oh jadi perbedaan fundamentalnya itu yah? jadi git itu bisa commit
kalaupun server unavailable.
saya jadi bingung, bukannya di SVN + dreamweaver, jika kita merubah
source code tanpa harus connect ke server svn, kan juga bisa toh? jadi
kita tetap bisa kerja tanpa harus terhubung ke server svn toh?
> Ada yang mau nambahin ?
>
> Note:
> - Maaf iklan, kalau mau panduan SVN di artivisi jual buku-nya yang nulis
> pak Endy sendiri:)
>
>
oh ada bukunya yah? boleh deh pesen. apa masih ada stok?
> [1]http://en.wikipedia.org/wiki/List_of_revision_control_software
>
>
[1]http://en.wikipedia.org/wiki/List_of_revision_control_software
--
Anda menerima pesan ini karena Anda berlangganan grup "Manajemen Proyek IT" dari Grup Google.
Untuk mengeposkan pesan ke grup ini, kirim email ke it-project-indonesia@googlegroups.com.
Untuk berhenti berlangganan dari grup ini, kirim email ke it-project-indonesia+unsub...@googlegroups.com.
Untuk opsi selengkapnya, kunjungi grup ini di http://groups.google.com/group/it-project-indonesia?hl=id.
saya pake dreamweaver, apakah ada plugin untuk dreamweaver yang support git?
dan jika pake git, apakah bisa dilewatkan via https seperti svn itu?
--
Anda menerima pesan ini karena Anda berlangganan grup "Manajemen Proyek IT" dari Grup Google.
Untuk mengeposkan pesan ke grup ini, kirim email ke it-project-indonesia@googlegroups.com.
Untuk berhenti berlangganan dari grup ini, kirim email ke it-project-indonesia+unsub...@googlegroups.com.
Untuk opsi selengkapnya, kunjungi grup ini di http://groups.google.com/group/it-project-indonesia?hl=id.
Mau metode diatas juga bisa sih (klo ga salah), tapi *biasanya* sih
strukturnya seperti ini :
- trunk/ semua source code yang masih tahap pengembangan dimasukin
kesini.
- branch/ jika mau tambah fitur baru, copy dr trunk ke kesini. Merge
code dari branch ke trunk jika dirasa perubahan di branch siap dipindah.
- tag/ copy source code dari trunk ke direktori ini kalau mau UAT/.
> untuk metode copy antara branch, trunk & tag, bisa pake copy paste
gitu
> atau gimana yah?
> katakan bikin branch baru, berarti kita copy semua source code itu ke
> directory branch yang baru dibuat itu kan yah? trus pada dreamweaver
> kita, path SVN harus diganti lagi dong?
Coba pakai console/terminal :D Perintahnya sederhana koq:
- Bikin branch[1]:
svn copy http://svn.example.com/repos/calc/trunk \
http://svn.example.com/repos/calc/branches/my-calc-branch \
-m "Creating a private branch of /calc/trunk."
- Bikin tag[2]:
svn copy http://svn.example.com/repos/calc/trunk \
http://svn.example.com/repos/calc/tags/release-1.0 \
-m "Tagging the 1.0 release of the 'calc' project."
>
> konsep branch, trunk & tag ini apakah general atau hanya di svn aja?
>
Setahu saya ini general.
> oh jadi perbedaan fundamentalnya itu yah? jadi git itu bisa commit
> kalaupun server unavailable.
> saya jadi bingung, bukannya di SVN + dreamweaver, jika kita merubah
> source code tanpa harus connect ke server svn, kan juga bisa toh?
jadi
> kita tetap bisa kerja tanpa harus terhubung ke server svn toh?
Bisa sih, tapi kita ga bisa menyimpan perubahan tertentu yang khusus
untuk task tertentu di file yang sama.
Misalkan saja gini, kita punya task fitur #190 (Fitur #190 ini misalkan
merubah file ABC.html) dan #191 (Fitur ini juga merubah file ABC.html).
Nah waktu dirumah kita coding ngerjain fitur #190 sampai selesai.
Kemudian kita ngerjain fitur #191 sampai selesai. Kalau di SVN,
perubahan pada file ABC.html yang kita simpan ke server yang tercatat
adalah perubahan terakhir saja.
Sedangkan kalau di git, bisa spt ini :
* Ngerjakan fitur #190
- Rubah file ABC.html
- Add dan Commit dng pesan "Selesaikan fitur #190" (Ini masih di lokal)
* Ngerjain fitur #191
- Rubah lagi file ABC.html
- Add dan commit dng pesan "Selesaikan fitur #191 (Ini masih di lokal
juga)
Ketika kita udah dapat koneksi internet, kita tinggal simpan perubahan
ke server dng cara :
$ git push
Nanti di log akan tampil 2 history pada file yang sama kurang lebih spt
ini :
- File ABC.html (Selesaikan fitur #190)
- File ABC.html (Selesaikan fitur #191)
> oh ada bukunya yah? boleh deh pesen. apa masih ada stok?
> >
Untuk pesan buku-nya bisa ke in...@artivisi.com :)
[1]
http://svnbook.red-bean.com/en/1.7/svn.branchmerge.using.html#svn.branchmerge.using.create
[2]
http://svnbook.red-bean.com/en/1.7/svn.branchmerge.tags.html#svn.branchmerge.tags.mksimple
anyway, karena saya cuman punya 1 directory untuk kerja, maka berarti
sama aja saya kerja di trunk dong yah?
btw yang di deliver ke customer itu yang trunk atau yang tag?
On 03/09/2012 11:26 AM, mjwa...@gmail.com wrote:
> Klo pengalaman sy ribet klo begini.
>
> Sy jarang minta branch gabung ke trunk, meski ada prosedur2nya, tapi kebanyakan merge terjadi setelah sekian commit antara versi trunk dan branch..
>
> Biasanya yg ada, setiap ada request fitur br dr branch, kita evaluasi dulu apakah ini akan masuk mainstream atau tidak, kalo masuk, dikerjakan di trunk..
>
> Jadi pattern yg sy lakukan adalah trunk yg selalu merge ke branch...
>
> Sent from my BlackBerry�
>
Sebenarnya gak harus terbaru itu di trunk dan maintenance itu di branch.
Konsepnya gini :
1. Branching itu adalah konsep universal, berlaku tidak hanya di svn,
tapi di *hampir* semua VCS populer (kecuali hg, populer tapi gak
support branch*)
* : hg support dengan beberapa tips dan trik, tapi dalam konteks
diskusi pemula,
disederhanakan menjadi tidak support.
2. Branching dilakukan karena kita ingin ada paralel development.
Kapan kita butuh paralel development?
Contoh : kita rilis versi 1.0 ke customer, kemudian lanjut development
untuk versi 2.0.
Di tengah2 development, ternyata 1.0 ada bug, sehingga harus difix dan rilis 1.1
Tentunya kita gak bisa fixing bug di tengah development 2.0,
karena kita tidak ingin deliver kode2 yang masih development.
Lagian, customernya kan beli versi 1, masa dikasi versi 2 + bug baru?
Solusinya, bikin branch yang sumbernya (parent-nya) dari rilis 1.0.
Lalu lakukan bugfix di sini.
3. How to branch akan dibahas di bawah.
>>
>> Sedangkan*tag* digunakan klo biasanya kita merilis versi ke x dan ingin
>>
>> menandai revisi dimana versi x ini dirilis.
>>
Saya perjelas lagi.
Biasanya kalau kita pakai VCS, nomer versi itu digenerate otomatis.
Subversion pakai auto increment, git pakai SHA-1 hash.
Nah, nomer ini agak sulit untuk diingat manusia biasa.
Kemarin kita rilis 1.0 itu di versi VCS yang mana ya?
Solusinya, kita bikin label/tag.
Contoh :
Subversion : r123 = 1.0, r456 = 1.1
Git : abcdef = 1.0, def123 = 1.1
>
> berarti urutannya adalah:
> - buat trunk
> - buat branch, taro source code disini
> - copy dari branch ke trunk
> - trus copy dari trunk ke directory tag.
> gitu yah?
>
> untuk metode copy antara branch, trunk & tag, bisa pake copy paste gitu atau
> gimana yah?
> katakan bikin branch baru, berarti kita copy semua source code itu ke
> directory branch yang baru dibuat itu kan yah? trus pada dreamweaver kita,
> path SVN harus diganti lagi dong?
>
> konsep branch, trunk & tag ini apakah general atau hanya di svn aja?
Ini konsep umum, tapi implementasinya beda.
Di svn, branch = folder.
Jadi bikin branch = copy folder yang sudah ada
Di git dan cvs, branch itu hanya ada di database dia aja, tidak
terlihat di file explorer.
Foldernya itu2 juga.
Misalnya, di branch utama ada file gini :
1.txt
2.txt
Trus kita bikin branch baru, misalnya branch bugfix-1.0, tambahin file
baru 3.txt
Nah file 3.txt ini hanya ada kalau branch bugfix-1.0 sedang aktif
Contoh :
c:\folder-saya\> dir
1.txt
2.txt
c:\folder-saya\> ganti branch jadi bugfix.1.0
c:\folder-saya\> dir
1.txt
2.txt
3.txt
c:\folder-saya\> ganti branch jadi trunk
c:\folder-saya\> dir
1.txt
2.txt
Kayak sulap gitu jadinya.
Hadirin, coba lihat foldernya, ada file 3.txt.
Sim salabim (pindah branch ke trunk)
Sekarang lihat lagi, sudah tidak ada.
> oh jadi perbedaan fundamentalnya itu yah? jadi git itu bisa commit kalaupun
> server unavailable.
> saya jadi bingung, bukannya di SVN + dreamweaver, jika kita merubah source
> code tanpa harus connect ke server svn, kan juga bisa toh? jadi kita tetap
> bisa kerja tanpa harus terhubung ke server svn toh?
Offline operation itu bukan cuma commit.
Tapi ada juga diff, history, dsb.
Contohnya :
Kita lagi edit kalkulator.php, di dalamnya ada function tambah().
Ternyata ada satu baris yang kita gak tau apa maksudnya, sehingga
harus tanya programmer yang bikin baris tersebut.
Gimana caranya? Gunakan fitur blame (ada di semua VCS), sehingga kita
tau baris per baris siapa yang bikin dan terakhir ngedit. Setelah tau,
kita bisa sms, ym, email, telp, atau whatever metode komunikasi yang
diinginkan, ke programmer yang ngedit.
Untuk bisa menampilkan blame, VCS harus melakukan query ke databasenya.
Subversion databasenya di server, kalo offline gak bisa query,
sehingga blame gak jalan.
DVCS, databasenya ada di local, jadi mau query kapan aja bisa.
Contoh lain :
Kita dapat assignment fixing bug no #123 dan #345.
Setelah beberapa jam coding, bug #123 selesai dikerjakan.
Tentunya sebelum lanjut fixing bug #345, kita harus commit dulu
perubahan bug #123nya
supaya gak campur2 mana fix bug #123, mana kerjaan lain.
Dengan dipisahkan gini, kita jadi tau alasan perubahan untuk tiap
baris dalam source code.
Kalau pakai svn, gak bisa commit, sehingga pilihannya :
- tetap lanjut ngerjain #345, dengan konsekuensi history perubahannya
jadi gak karuan
- facebookan dulu nunggu server VCSnya online.
Beda kondisi kalau pake DVCS, langsung aja commit, trus lanjut fixing #345.
Begitu online, langsung push walaupun fixing #345 belum selesai
(sehingga belum dicommit).
--
Endy Muhardin
http://endy.artivisi.com
Trunk itu hanya istilah svn aja.
Biar lebih jelas, lebih baik istilahnya diganti :
- development branch : coding nambah fitur di sini
- maintenance branch : aplikasi yang sudah dirilis, bugfixingnya di sini.
Konvensi (bukan kewajiban) di Subversion, development branch disebut
dengan trunk.
>
> btw yang di deliver ke customer itu yang trunk atau yang tag?
Deliver mana aja terserah, kan kondisinya juga beda2.
Kalo project software, biasanya client mau ngetes juga versi yang
belum selesai.
Ya rilis aja dari trunk.
Kalo produk masal kayak Ubuntu, Windows, tiap kali rilis harus ditag.
Biar kalo ada bug report jelas dari mana sumbernya, dan di mana harus fixingnya.
>> untuk metode copy antara branch, trunk& tag, bisa pake copy paste gitu atau
>> gimana yah?
>> katakan bikin branch baru, berarti kita copy semua source code itu ke
>> directory branch yang baru dibuat itu kan yah? trus pada dreamweaver kita,
>> path SVN harus diganti lagi dong?
>>
>> konsep branch, trunk& tag ini apakah general atau hanya di svn aja?
yg diterangin mas endy dan teman2 lain udah jelas, cek ini juga
http://project-template.googlecode.com/files/subversion.pdf (thanks kang ifnu)
ane lumayan lama pake svn,
dan cukup lama bertahan gak pernah sampai ke branching,
seluruh kegiatan dilakukan di master (trunk),
semua orang tarik source code terbaru dan setiap orang setor ke master.
satu orang commit junk code, semua orang ngerasain (appsnya broken
alias gak jalan, kudu dipatch ato dibalikin ke versi sebelumnya).
terus satu saat ada keperluan untuk branching,
sampai sekarang branchnya gak bisa balik ke trunk (well mainly because
a massive difference in code base, karena kita gak terlalu paham
branching karena gak pernah ngelakuin, disini ada masalah duluan mana
ayam-sama-telor)
sebagian lagi karena kita baca2 cara merging di svn dan gak pernah
paham, dan gak jadi nge-lakuin karena takut master kita rusak.
mohon maaf sebelumnya, saya gak nyari flamewar, cuman sharing doang.
tapi di svn, kita punya kebiasan untuk "doing everything to perfection",
kita code, tes bener2 biar gak rusak, baru kita berani commit,
ya, it works fine actually,
sampe kita ketemu cara kerja yg lebih baik.
kalo kita googling antara VCS seperti SVN versus DVCS (macam git atau hg),
orang selalu menggarisbawahi distributednya, gak perlu koneksi
internetnya, kecepatan, dll.
kalo saya bilang itu bonusnya doang,
perbedaan terbesarnya saya kira ada di workflow, lebih spesifik: cheap
branching dan merging.
di git, branching/merging dilakukan sangat gampang, dan kita tidak
punya kewajiban mengakomodasi semua branch, saya bebas eksperimen
tanpa takut ngerusak. Tiap branch boleh berisi sebuah skenario (fitur2
yg lagi dicoba), bug fix, kerjaan temen, dll. Setelah branch
digabungin balik ke branch utama (master) branch yg gak kepake bisa
dihapus.
ini contoh branch di tempat saya:
$ git branch
2d8d2-bendera-info-window
3c6d519d1-bendera-ganti-icon
3c6d519d1-tambah-bendera-barat-timur
* 64b0ab-bendera-info-window-dan-shadow
devel
master
dalam 1 working directory, saya punya segitu banyak skenario.
ceritanya begini:
"awalnya klien minta ditambahin bendera arah kendaraan pada aplikasi
googlemapnya", jadi:
3c6d519d1-tambah-bendera-barat-timur = buat branch baru terus saya
tambahin yg dia minta
3c6d519d1-bendera-ganti-icon = klien gak suka dengan kerjaan kita jadi
minta benderanya menempel di kendaraan sebagai icon
2d8d2-bendera-info-window = klien berubah pikiran mungkin lebih baik
kalo benderanya tampil dalam popup window
64b0ab-bendera-info-window-dan-shadow = berubah pikiran lagi bendera
tampil dalam pop up window dan sekaligus sebagai icon
nah, ini situasi yg umum waktu development kan ? (err.. mungkin cuman
tim kami aja sih)
keempat branch tadi hidup secara bersamaan, tapi satu waktu kita cuma
aktif di salah satunya (kayak paralel universe di pilem2)
jadi kalo klien ngomong, coba lihat yg bendera pertama tadi, kita
tinggal checkout branch itu, otomatis seluruh file dalam working
directory menyesuaikan, refresh browser dan voila... tampilannya sudah
beda.
perbedaan yg lain adalah, dengan git kita lebih terbiasa review code
sebelum dipake,
jadi tiap orang gak _harus_ setor kerjaan langsung ke master, tapi
_bisa_ masuk ke branch pribadi masing-masing,
tar integrator-nya yg ngetes dan gabungin. Sebelum dites biasanya
direview dulu, kalo sepintas code yg ditulis gak beres atau kemudian
setelah integrasi bikin apps rusak, tu code bisa ditolak dan si
programmer mesti perbaikin dulu sampe diterima ama integrator baru
digabungin ke master.
jadi yg terpilih aja yg masuk ke master.
dengan SVN kami sudah cukup produktif,
tapi dengan git, kami jadi lebih... kreatif.
ilustrasi workflow git yg terkenal:
http://nvie.com/posts/a-successful-git-branching-model/
lupain aja konsep2 susah di git,
mulai langsung praktek dari yg umum2 (commit, diff, push, fetch, merge, dll),
ntar konsep lain pelan-pelan ngikutin. cek ini:
http://www-cs-students.stanford.edu/~blynn/gitmagic/ch02.html
awal belajarnya agak bingung, tapi worth it kok.
cheers,
.daudmukadar
Salam,
> --
> Anda menerima pesan ini karena Anda berlangganan grup "Manajemen Proyek IT"
> dari Grup Google.
> Untuk mengeposkan pesan ke grup ini, kirim email ke
> it-project...@googlegroups.com.
> Untuk berhenti berlangganan dari grup ini, kirim email ke
> it-project-indon...@googlegroups.com.
> Untuk opsi selengkapnya, kunjungi grup ini di
> http://groups.google.com/group/it-project-indonesia?hl=id.
>
>
--
Sent from my mobile device
Bisa coba kesini[1]
Regards,
--
Martinus Ady H
@martinusadyh
kalo lebih practical mungkin lebih cocok nonton video,
http://www.youtube.com/watch?v=ZDR433b0HJY
atau baca contoh2 (HOWTO) langsung coba,
http://gitready.com/
http://www-cs-students.stanford.edu/~blynn/gitmagic/ch02.html
.daudmukadar