Git taahhüdünün “bu dosyayı izlemeyi durdurun, ancak silmeyin” gibi bir niyet kaydedebileceğini sanmıyorum.
Böyle bir niyetin yürürlüğe girmesi, dosyayı silen bir taahhüdü birleştiren (veya yeniden adlandırılan) depolarda Git dışında müdahale gerektirir.
Bir Kopyasını Kaydet, Silme Uygula, Geri Yükle
Muhtemelen yapılacak en kolay şey, alt kullanıcılarınıza dosyanın bir kopyasını kaydetmelerini, silmenizi çekmelerini ve ardından dosyayı geri yüklemelerini söylemektir. Rebase aracılığıyla çekiyorlar ve dosyada değişiklikler yapıyorlarsa, çakışmalar yaşayacaklar. Bu tür çakışmaları gidermek için, git rm foo.conf && git rebase --continue
(çakışan işlem kaldırılan dosyadakilerin dışında değişiklikler git rebase --skip
varsa ) veya (çakışan işlem yalnızca kaldırılan dosyaya değiştiyse) kullanın.
Silinen bir İşlem Yaptıktan Sonra Dosyayı İzlenmemiş Olarak Geri Yükle
Silme taahhüdünüzü zaten çekmişlerse, yine de git show ile dosyanın önceki sürümünü kurtarabilirler :
git show @{1}:foo.conf >foo.conf
Veya git checkout ile (William Pursell tarafından yapılan yorum başına; ancak dizinden yeniden kaldırmayı unutmayın!):
git checkout @{1} -- foo.conf && git rm --cached foo.conf
Silme işleminizi çektikten sonra başka eylemlerde bulunduysa (veya rebase ile ayrı bir HEAD'a çekiyorlarsa), başka bir şeye ihtiyaçları olabilir @{1}
. git log -g
Silmenizi çekmeden hemen önce taahhüdü bulmak için kullanabilirler .
Bir yorumda, “izlemek, ancak saklamak” istediğiniz dosyanın, yazılımı çalıştırmak için gereken bir tür yapılandırma dosyası olduğunu (doğrudan depodan) belirttiğinizden bahsediyorsunuz.
Dosyayı 'Varsayılan' Tutun ve Manuel / Otomatik Olarak Etkinleştirin
O depoda Yapılandırma dosyasının içeriğini korumak için devam etmek tamamen kabul edilemez değilse, siz (örn) den izlenen dosyayı yeniden adlandırmak mümkün olabilir foo.conf
için foo.conf.default
ve sonra kullanıcılar talimat için cp foo.conf.default foo.conf
yeniden adlandırma taahhüt uygulandıktan sonra. Kullanıcılar Makefile
, yazılımınızı başlatmak / dağıtmak için deponun varolan bir kısmını (örn. Havuzdaki içerik tarafından yapılandırılmış (örn. Veya benzeri)) mevcut bir bölümünü zaten kullanıyorsa , başlatma / konuşlandırma süreci:
test -f foo.conf || test -f foo.conf.default &&
cp foo.conf.default foo.conf
Yerinde böyle bir varsaymak mekanizma ile kullanıcılar bir o yeniden adlandırır işlemek çekin gerekir foo.conf
için foo.conf.default
ilave bir çaba harcamanıza gerek kalmadan. Ayrıca, gelecekte ek kurulumlar / depolar yaparsanız, bir yapılandırma dosyasını el ile kopyalamak zorunda kalmazsınız.
Geçmişi Yeniden Yazmak Yine de Manuel Müdahale Gerektirir…
İçeriğin depoda tutulması kabul edilemezse, büyük olasılıkla içeriği geçmişten tamamen silmek istersiniz git filter-branch --index-filter …
. Bu, her şube / depo için manuel müdahale gerektiren yeniden yazma geçmişine denk gelir ( git rebase kılavuzundaki “Yukarı Akış Rebase'den Kurtarma” bölümüne bakın ). Yapılandırma dosyanız için gereken özel işlem, yeniden yazma işleminden kurtarırken gerçekleştirmeniz gereken başka bir adım olacaktır:
- Yapılandırma dosyasının bir kopyasını kaydedin.
- Yeniden yazma işleminden kurtarın.
- Yapılandırma dosyasını geri yükleyin.
Nüksü Önlemek için Yoksay
Hangi yöntemi kullanırsanız kullanın, büyük olasılıkla .gitignore
havuzdaki bir dosyaya yapılandırma dosya adını dahil etmek isteyeceksiniz, böylece hiç kimse yanlışlıkla istemeyecektir git add foo.conf
(bu mümkündür, ancak -f
/ gerektirir --force
). Birden fazla yapılandırma dosyanız varsa, hepsini tek bir dizine 'taşımayı' ve her şeyi görmezden gelmeyi düşünebilirsiniz ('taşıyarak' Programın yapılandırma dosyalarını bulmayı beklediği yeri değiştirmek ve kullanıcıları almak (veya başlatma / dağıtma mekanizması) dosyaları yeni konumlarına kopyalamak / taşımak için; açık bir şekilde görmezden geleceğiniz bir dizine mv gitmesini istemezsiniz ).