Saya sedang dalam proses menyiapkan akun GitHub dengan rencana membuat sepasang perpustakaan yang saya kembangkan sebagai bagian dari beberapa proyek iOS terbaru yang tersedia secara bebas untuk pengembang aplikasi iOS lainnya untuk digunakan.
Saat ini saya tidak memiliki cadangan di luar situs untuk sebagian besar kode saya, jadi sebagai bagian dari ini, saya awalnya berpikir saya akan mengunggah semua proyek pribadi saya, atau setidaknya semua proyek iOS saya, ke repositori pribadi yang di-host oleh GitHub . Namun, saya memiliki banyak proyek yang sedang berlangsung, banyak di antaranya bernilai rendah (yaitu, diadaptasi dari buku dan ditulis untuk pengalaman belajar). GitHub tidak hanya diisi oleh repositori pribadi, tetapi juga tidak memiliki cara untuk mengatur repositori secara hierarkis.
Apakah ada sesuatu yang saya lewatkan yang akan memungkinkan saya untuk menggunakan repositori git dengan hierarki dan memeriksa potongan-potongan yang saya butuhkan / bekerja dengannya, seperti yang saya lakukan saat ini dengan SVN?
Apakah GitHub (atau pesaing, seperti BitBucket) memiliki beberapa fitur organisasi proyek yang saya lewatkan?
Kegagalan itu, apa "cara Git" yang diterima secara umum untuk menangani situasi ini (membuang proyek yang tidak dimaksudkan untuk rilis, menyimpannya secara offline, menggabungkannya entah bagaimana, dll, dll.)?
Sejauh yang saya tahu, pilihan saya adalah:
- Letakkan pustaka di GitHub, terus hosting SVN saya sendiri untuk semua proyek lainnya, gunakan solusi non-VCS untuk backup di luar situs (blech),
- Letakkan perpustakaan dan perangkat lunak yang saya rencanakan untuk rilis di GitHub (masing-masing sebagai publik dan pribadi), terus hosting SVN saya sendiri untuk proyek yang tidak terlalu saya pedulikan dan saya hanya akan meninjau kembali untuk menyegarkan ingatan saya tentang bagaimana menerapkan XYZ, memutuskan bahwa saya bersedia untuk menghapusnya jika rumah saya meledak (blech ganda),
- Letakkan semuanya di [GitHub dan / atau BitBucket], berurusan dengan memiliki beberapa repositori konyol dengan mencari apa yang saya butuhkan / mempertahankan beberapa set pointer offline ke akun [GitHub dan / atau BitBucket] saya (triple blech)
sumber
Jawaban:
bitbucket.org memungkinkan Anda membuat repo pribadi tanpa batas.
Git tidak membiarkan Anda memeriksa hanya beberapa potong kode. Jadi, Anda perlu membuat repo untuk setiap proyek, atau berurusan dengan kloning semua proyek. Pada kenyataannya saya tidak melihat masalah dengan menempatkan semua proyek kecil kami dalam satu repo. Anda mengkloningnya sekali dan selesai.
Dengan Git Anda tidak perlu "checkout" kode lagi kecuali Anda menerbangkan repo lokal Anda atau pindah ke komputer lain. Anda hanya akan menyinkronkan semua perubahan Anda.
Saya memiliki masalah simular dengan sejumlah besar repositori. Alasan saya tidak dapat menyimpan semuanya dalam satu repositori adalah karena saya perlu melakukan percabangan versi yang berbeda dari setiap repositori. Sangat sulit untuk dikelola.
sumber
Jawaban singkat ...
Saran saya: Mulai dengan akun publik di GitHub dan / atau Bitbucket (lainnya?). Lemparkan beberapa proyek publik dan mulai gunakan alat / antarmuka. Setelah Anda merasakan layanan, maka Anda harus memahami apa keterbatasan, kelebihan dan kekurangan dari masing-masing layanan. Dari sana, Anda harus dapat memilih jalur terbaik menuju pencerahan kontrol versi. :)
Jawaban panjang ...
Sudahkah Anda mempertimbangkan untuk menginstal klien Git Anda sendiri? Jika Anda sudah membayar untuk hosting web, maka mungkin masuk akal untuk menggunakan host itu untuk pengaturan Git Anda sendiri.
Misalnya, host saya adalah WebFaction (tidak ada afiliasi):
Menginstal Aplikasi Web Git
Menuju rute ini memungkinkan Anda menghemat $$$, terutama. jika Anda sudah membayar untuk hosting.
Hanya untuk mengklarifikasi untuk orang lain (sekali lagi, tidak ada afiliasi bisnis dengan GitHub atau BitBucket):
GitHub: Paket & Harga
Perhatikan bahwa harga "Paket Bisnis" berbeda.
Harga untuk hosting repositori Git dan Mercurial untuk Bitbucket oleh Atlassian
Seperti yang dinyatakan oleh Andrew dalam jawaban lain, Bitbucket mempromosikan repo pribadi tanpa batas.
Tidak yakin persis apa yang Anda maksud dengan "hierarkis" (mungkin karena saya tidak terbiasa dengan SVN).
Saya tidak yakin apakah ini akan membantu, tetapi Anda bisa melihat tabel perbandingan ini untuk melihat bagaimana perintah membandingkan / berbeda:
Percabangan?
git-flow
)Tidak yakin apakah ini akan membantu, tetapi Anda mungkin melihat:
... sekali lagi, tidak yakin apakah ada alat yang dapat membantu Anda merasakan apa yang mungkin terjadi.
Untuk lebih jelasnya, saya tidak yakin dengan Anda tingkat keahlian Git ... jika Anda baru mengenal Git / GitHub, menggunakan GUI mungkin merupakan cara cepat / mudah bagi Anda untuk merasakan sesuatu. Saya pribadi suka menggunakan GitHub resmi untuk aplikasi Mac / Windows.
Jika saya jadi Anda, saya akan menggunakan repositori.
Berapa banyak repositori pribadi yang Anda butuhkan?
Jika Anda ingin menggunakan GitHub, salah satu solusinya mungkin dengan mendapatkan paket termurah dan menggunakan beberapa repo pribadi untuk menampung semua tes / kode non-publik Anda. Anda bisa menggunakan struktur folder di
main
cabang Anda untuk mempertahankan struktur hierarkis, atau Anda bisa menggunakan beberapa cabang untuk menjaga hal-hal lebih terpisah.Kiat: Jika Anda menggunakan versi Git yang lebih baru, Anda dapat menarik cabang tertentu menggunakan
git clone -b mybranch --single-branch git://sub.domain.com/repo.git
:Saya harus memperingatkan Anda, menggunakan cabang untuk mengatur kode (seperti folder) sebenarnya bukan cara terbaik untuk melakukan sesuatu (meskipun, tidak ada yang mengatakan Anda tidak bisa menuju rute ini).
(Lihat jawaban saya di sini untuk info terkait sehubungan dengan cabang GitHub. )
Sekali lagi, saya pikir beberapa repo adalah cara untuk pergi.
Anda mungkin bertanya pada diri sendiri apakah kode Anda benar-benar perlu pribadi; mungkinkah Anda bisa go public dengan kode tersebut tanpa dampak?
Jika Anda menuju rute ini, Dropbox (atau yang serupa) mungkin merupakan cara yang baik untuk mendapatkan beberapa bentuk kontrol versi dan sinkronisasi untuk cadangan luar-situs Anda.
Ini membawa saya kembali ke pertanyaan "Apakah Anda sudah membayar untuk hosting? Jika demikian, Anda dapat menginstal host Git Anda sendiri"; keuntungannya adalah, Anda dapat memiliki semua kode sumber di bawah payung Git, bahkan jika itu tidak semuanya berada di host yang sama (yaitu, gunakan GitHub untuk hal-hal umum yang ingin Anda pamerkan).
---> Lihat jawaban singkat saya di atas. ^^^^^^
sumber
Inilah yang saya lakukan:
Masukkan semua kode lain ke dalam repo "sampah". Ini dapat mencakup kode yang digunakan untuk belajar dan menguji serta potongan kecil yang tidak benar-benar bagian dari proyek. Selama tidak ada alasan untuk merahasiakan ini, Anda dapat meng-host repo ini di GitHub juga.
Selain semua keuntungan biasa dari kontrol versi (yang sudah Anda miliki dengan SVN), sekarang kode Anda dicadangkan secara online. Jika salah satu kode sampah Anda berubah menjadi proyek, Anda bisa memutarnya menjadi repo sendiri.
Anda dapat memasukkan kode ini ke dalam repo yang terpisah atau menggunakan sesuatu yang mewah seperti git submodules atau subtree, tetapi saya merasa lebih mudah untuk menyimpannya dalam satu repo dan mengelolanya menggunakan folder. Ini jauh lebih sederhana dan git cukup cepat sehingga ukuran repo tidak menjadi masalah.
sumber
Salah satu teknik yang mungkin adalah menggunakan cabang.
Cabang dalam git repo hanyalah petunjuk yang harus dilakukan, mereka tidak harus berhubungan satu sama lain dengan cara apa pun. Jadi Anda dapat membuat repo "minorprojects" pada layanan hosting dan kemudian menggunakan cabang dalam repo itu untuk setiap proyek. Jika sebuah proyek kecil tumbuh, Anda dapat dengan mudah memindahkan cabang ke repo itu sendiri.
Secara lokal Anda dapat menyimpan cabang dalam repo lokal yang terpisah (tidak harus ada pemetaan 1: 1 antara repo lokal dan jarak jauh) atau memiliki satu repo lokal dan menggunakan git worktree untuk memelihara beberapa pohon yang bekerja. Secara pribadi saya curiga pendekatan pertama kurang rawan kesalahan.
sumber
git worktree
perintah, yang memungkinkan Anda membuat pohon kerja tambahan untuk repositori, memungkinkan Anda memeriksa beberapa cabang secara bersamaan. Dengan ini, kerugian dari pendekatan Anda pada dasarnya menghilang: Cukup buat pohon kerja untuk setiap cabang independen, dan gunakan seperti repo independen. Mungkin ide yang baik untuk menambahkan ini ke jawaban Anda :-)