Bagaimana saya bisa membuat file git commit dalam folder yang disinkronkan

19

Saya punya dua folder:

  • /home/me/code/project/
  • /srv/www/projectfiles/

Dalam /home/me/code/projectfolder itu, saya telah terhubung staticke/srv/www/projectfiles/

yaitu /home/me/code/project/static/->/srv/www/projectfiles/

Ketika saya mencoba melakukan sekarang, itu tidak melihat file di balik symlink, dan sebaliknya mencoba untuk melakukan symlink itu sendiri sebagai file.

Bagaimana cara saya mengkomit file (mis. /srv/www/projectfiles/style.css) Yang ada di belakang symlink?

Macha
sumber

Jawaban:

12

Sebuah solusi adalah memiliki / srv / www / projectfiles menjadi symlink ke / home / me / code / project / static sehingga git tidak melihat symlink

pengguna151019
sumber
Jadi pada dasarnya Anda membalikkan logika? Simpan file / folder yang diperlukan di folder Git dan kemudian letakkan symlink di tempat lain (di mana file / folder asli digunakan untuk berada)?
RusI
@Rusl Ya persis seperti itu
user151019
Tapi lalu bagaimana saya bisa melakukan kustomisasi lokal file? Saya harus memiliki repo terpisah untuk setiap mesin? Kehilangan seluruh intinya.
Ashnur
Ya, kustomisasi lokal tidak akan ada di git
user151019
3

Jika Anda menggunakan linux, saya terutama menyukai solusi yang disediakan oleh GitBLSR . Ini adalah pustaka yang dimuat melalui LD_PRELOAD yang secara transparan mereferensikan symlink ke file dan folder di luar repositori.

Untuk menginstalnya untuk akun pengguna lokal sederhana:

git clone https://github.com/Alcaro/GitBSLR.git
cd GitBSLR
./install.sh

Ini akan mengkompilasi pustaka dan membuat alias seperti berikut ini di ~/.bashrc:

alias git="LD_PRELOAD=/path/to/gitbslr.so git"

Menggunakan alias ini memungkinkan dereferencing tautan transparan.

Menandai
sumber
1
Itu buruk! Tapi itu bekerja dengan baik, jadi itu bagus. Terima kasih!
Kay kecewa pada
Itu aneh! Saya sangat menyukainya
Marcos Besteiro López
2

Pertimbangkan untuk menggunakan titik mount untuk memasang folder tujuan (yang saat ini Anda symlink) untuk muncul di lokasi yang Anda inginkan di bawah proyek git. Saya telah menggunakan pendekatan ini dengan sukses.

Tony Garland
sumber
1

Pindahkan file ke dalam folder dan hapus symlink. Git tidak melintasi symlink.

Itu (dan saya) akan berasumsi bahwa Anda symlinking ke satu set file yang Anda tidak kontrol atau tidak ingin memodifikasi, karena itu mereka tidak perlu diversi.

Josh K.
sumber
1
Saya mengontrol file-file ini. Mereka adalah stylesheet dll. Dan harus berada dalam direktori di mana server akan melakukan server.
Macha
1

Solusi lain - satu-satunya yang saya temukan yang juga berfungsi untuk direktori - adalah mengubah pohon git untuk tindakan tertentu.

git --work-tree=/home/me/code/project/ add /home/me/code/project/static/
git --work-tree=/home/me/code/project/ commit /home/me/code/project/static/
Ohad Cohen
sumber