2011-12-12 11 views
22

Farz edelim fname bir dosya var, bu da başka bir depodan/projeden bir dosyaya bağlantı, yani ../../proj2/fname.git düzenli bir dosya olarak sembolik bağlantıyı gerçekleştir

Düzenli bir dosya olarak fname eklemek/işlemek için bir yol var mı?

Varsayılan olarak, git dosya modu 120000'ü verir ve bağlantılı dosyaya giden yolu blob içeriği olarak ayarlar.

Bu dosyayı biliyorum çünkü git ls-tree dosya için 120000 modunu gösterir ve git cat-file -p blob içeriği olarak ../../proj2/fname gösterir.

+0

Merhaba, Git'i kullanarak bir dosyayı symlinkinf ile ilgili adımları güncelleyebilir misiniz? –

cevap

13

Hayır, Git bunun bir sembolik bağlantı olduğunu biliyor. Git'in tersine davranması tehlikeli bir şey olurdu, çünkü o zaman, 'unrepo'su dışında dosyalara yazılır. Bir sembolik bağlantı olarak izlemek tam olarak istenen davranıştır.

+2

Bu durumda yazma davranışının sembolik bağlantıyı kaldırmasını ve normal bir dosyayla değiştirmesini beklerdim. – hasen

+2

@hasenj: İstediğiniz buysa, link bağlantısını kaldırın ve bağlı dosyanın bir kopyasıyla değiştirin. "Beklenen" davranışınız Git'in bir dosyayı değiştirip değiştirmesini içerir. taahhüt? Bu da iyi bir şey değil. – Cascabel

+1

Git deponuza işaret eden sembolik bağlantılara sahip olmanız daha yararlı olur. Bir sistem yapılandırmanız için bir depoya sahipseniz ve kontrol edilen depodaki dosyaların bağlantıları ile git yönetilen yapılandırma dosyalarını değiştirdiyseniz bu durum söz konusu olabilir. – LovesTha

3

Windows'ta, bir Kavşağı Örneğin

ile istediğini yapabileceğini, programları genellikle bir ayarlar sistemde bir yerlerde dosyası tutmak, ama benim deposundaki sürüm kontrolü bunu istiyorum. Dosyayı taşıyamıyorum ve yinelenen veya herhangi bir şey yapmak istemiyorum

Depo dizinine bir Windows Kısayolu koyarsak, ikili bir dosya olarak görür; değil İhtiyacımız depoda gibi Windows kısayol şey koymak yeteneği, ama bu git olarak sadece başka bir klasör davranacak

eklemek istediğiniz tüm fiili dosyalara işaret eden bir dizin:

cd /location/of/my/repo/ 
mklink /j "_linkTo_VimSettings" "C:\Program Files (x86)\Vim" 
+0

Akış yukarı yönde bir değişikliği birleştirirseniz ne olur? Git kaynak içeriği değiştirecek mi? Jefromi'nin [başka bir cevapta] bahsettiği gibi (http://stackoverflow.com/a/8470365/109618), bu tehlikeli olur. –

32

Dosyanın bağlantı yerine görünmesini istiyorsanız, bir simet bağlantısı yerine (ln -s) bir sabit bağlantı oluşturmak için ln komutunu kullanmalısınız.

Sabit bir bağlantı oluştururken, aynı dosyanın iki farklı dizinin altında görünmesini sağlayabilirsiniz; böylece, bağlantılardan herhangi biriyle değişiklik yapılması, her iki bağlantıda da değişiklikleri yansıtacaktır ve dosya her iki dizinde de geçerli olacaktır. git tarafından izlenebilir.

Umarız Bukov's answer numaralı Windows'taki 'mklink /j komutu bunu yapar, ancak gerçekten hiç bilmiyorum.

+3

Bu cevap, bana @Jefromi'den daha yararlı geliyor. – JohnAllen

+1

'ln' ile sabit bağlantıların yalnızca dosyalar için değil, dizinler için çalıştığına dikkat edilmelidir. – BillyTom

+0

Tam olarak ne aradım! UNIX sistemlerine Kudos! – blackjacx

İlgili konular