Apakah mungkin memiliki 2 repositori git dalam satu direktori? Kurasa tidak, tapi kupikir aku akan bertanya. Pada dasarnya, saya ingin memeriksa file konfigurasi direktori home saya (misalnya .emacs) yang seharusnya umum di semua mesin yang saya gunakan, tetapi memiliki repositori kedua untuk file lokal (misalnya .emacs.local), yang berisi konfigurasi khusus mesin. Satu-satunya cara yang dapat saya pikirkan untuk melakukannya adalah dengan memiliki konfigurasi lokal di subdirektori dan mengabaikan subdirektori tersebut dari repositori git utama. Ada ide lain?
git
git-submodules
git-subrepo
Joe Casadonte
sumber
sumber
git subtree
akan menyelesaikan pekerjaan.Jawaban:
Jika saya mengerti apa yang Anda lakukan, Anda dapat menangani semuanya dalam satu repositori, menggunakan cabang terpisah untuk setiap mesin, dan cabang yang berisi file konfigurasi direktori home umum Anda.
Inisialisasi repo dan komit file umum ke sana, mungkin mengganti nama cabang MASTER sebagai Common. Kemudian buat cabang terpisah dari sana untuk setiap mesin yang Anda gunakan, dan komit file khusus mesin ke dalam cabang itu. Setiap kali Anda mengubah file umum, gabungkan cabang umum ke setiap cabang mesin dan dorong ke komputer Anda yang lain (tulis skrip untuk itu jika ada banyak).
Kemudian di setiap mesin, periksa cabang mesin itu, yang juga akan menyertakan file konfigurasi umum.
sumber
Artikel ini mencakup ini dengan relatif baik:
https://github.com/rrrene/gitscm-next/blob/master/app/views/blog/progit/2010-04-11-environment.markdown
Pada dasarnya jika Anda bekerja dari baris perintah, ini lebih sederhana dari yang Anda duga. Misalkan Anda menginginkan 2 git repo:
Anda dapat mengaturnya seperti ini:
Anda dapat menambahkan file dan melakukan itu hanya ke satu file seperti ini:
Jadi opsi untuk git muncul terlebih dahulu, lalu perintahnya, lalu opsi perintah git. Anda dapat dengan mudah menggunakan perintah git alias:
Jadi, Anda dapat berkomitmen pada salah satunya dengan sedikit mengetik, seperti
gitone commit -m "blah"
.Apa yang tampak lebih rumit adalah pengabaian. Karena .gitignore biasanya berada di root proyek, Anda harus menemukan cara untuk mengalihkannya juga tanpa mengalihkan seluruh root. Atau, Anda dapat menggunakan .git / info / exclude, tetapi semua pengabaian yang Anda lakukan tidak akan dilakukan atau didorong - yang dapat mengacaukan pengguna lain. Orang lain yang menggunakan repo mungkin mendorong .gitignore, yang dapat menyebabkan konflik. Tidak jelas bagi saya cara terbaik untuk menyelesaikan masalah ini.
Jika Anda lebih suka alat GUI seperti TortoiseGit, Anda juga akan menghadapi beberapa tantangan. Anda dapat menulis skrip kecil yang mengganti nama .gitone atau .gittwo menjadi .git untuk sementara agar asumsi alat ini terpenuhi.
sumber
alias gitone='git --git-dir=.gitone'
gitone config core.excludesfile gitone.exclude
dangitone add gitone.exclude
. Saya membuat skrip yang memperluas solusi ini: github.com/capr/multigitgit config --global alias.youralias '!git --git-dir="/d/MyProject/_git"'
makagit youralias status
:).gitignore
file biasanya disetel-dan-lupa, Anda dapat membuat salinan berbeda untuk setiap repo, lalu menyalin versi yang relevan ke direktori sebagai bagian dari alias. Ini berlaku untuk file lain di root yang mungkin konflik, sepertiREADME.md
dan.gitattributes
.Lihat submodul git .
sumber
RichiH menulis alat yang disebut vcsh yang merupakan alat untuk mengelola dotfiles menggunakan repo git palsu untuk meletakkan lebih dari satu direktori kerja ke dalam $ HOME. Tidak ada hubungannya dengan csh AFAIK.
Namun, jika Anda memang memiliki beberapa direktori, alternatif untuk git-submodules (yang merepotkan dalam situasi terbaik dan penggunaan contoh ini bukanlah situasi terbaik) adalah gitslave yang membiarkan repo slave diperiksa di ujung a cabang setiap saat dan tidak memerlukan proses tiga langkah untuk membuat perubahan dalam repo anak perusahaan (checkout ke cabang yang benar, buat & lakukan perubahan, lalu masuk ke superproject dan lakukan komitmen submodul baru).
sumber
Dimungkinkan dengan menggunakan variabel
GIT_DIR
tetapi memiliki banyak peringatan jika Anda tidak tahu apa yang Anda lakukan.sumber
Ya, submodul mungkin yang Anda inginkan. Pilihan lain adalah memiliki copy pekerjaan Anda di subdirektori dan kemudian mengarahkan symlink dari direktori home Anda ke file yang diinginkan.
sumber
metode pilihan saya adalah menggunakan repo di subdir, dan menggunakan tautan simbolik rekursif:
di mana ' repo / build ' -file terlihat seperti:
PERHATIAN : jangan gunakan 'git add.'
sumber
Pilihan lainnya adalah dengan mereka di folder terpisah dan membuat tautan keras simbolis dari satu folder ke folder lainnya.
Misalnya, jika ada repositori:
Dan:
Anda dapat menghubungkan folder
FolderA
danFolderB
dari Repo1 ke Repo2. Untuk windows, perintah untuk berjalan di Repo1 adalah:Untuk file-file pada repositori utama Anda perlu menghubungkannya dengan symlink masing-masing, juga menambahkannya ke repositori
.gitignore
untuk menghindari gangguan, kecuali Anda menginginkannya.sumber
Penafian: Ini bukan iklan. Saya adalah pengembang perpustakaan yang disediakan.
Saya telah membuat ekstensi git untuk menangani kasus di mana Anda ingin menggabungkan banyak repositori ke dalam satu folder. Keuntungan dari lib adalah, untuk melacak repositori dan konflik file. Anda dapat menemukannya di github . Ada juga 2 contoh repositori untuk mencobanya.
sumber