Git'in yeniden yazma geçmişini önlemek için “güvenli mod” var mı?


11

Git (ve genel olarak DVCS) ile biraz yeniyseniz ve geçmiş yeniden yazma değişikliklerini keşfetmeye başladığınızda, depo yalnızca yerelse güvende olursunuz, ancak uzaktan kumandalarla çalışıp bu tür değişiklikleri itin.

Beklediğim bir özellik, temelde yapmam gereken her şeyi yapmamı engelleyecek bir "güvenli mod" etkinleştirme yeteneğidir ... Ve bununla ne demek istiyorum? Yani bir kökene itilmiş olan şeyler için tarih yeniden yazma değişiklikleri. Tam olarak tanımlayamıyorum, ancak bu gibi durumları içerecektir:

  • commit --amend HEAD zaten itildiğinde
  • rebase yerel olmayan bir şubenin
  • reset itilmiş bir şubenin

Bunlar muhtemelen bir sonraki pushbaşarısızlığa neden olacak durumlara örnektir (çünkü hızlı ileri olmaz, IIRC). Bunlardan bazılarını kazara yaptım ve uzaktaki şubeyi yeniden oluşturmak zorunda kaldım. Ve hala bunu yeterince hızlı yaptığım için şanslıydım, böylece kimse yeniden yazdığım tarihi çekmedi.

Bu tür değişiklikleri tanımlamanın ve talep üzerine kullanıcının bunları yapmasını engellemenin mümkün olduğuna inanıyorum. Bunun için belki bir seçenek var mı?

Yoksa, yaratmaya çalışmanın değerli olduğunu düşünüyor musunuz? Böyle bir "tehlikeli değişimin" nasıl kesin olarak tanımlanacağını tanımlamaya çalışır mısınız?


Kötü değişiklikler yapmanın diğer programcıları etkilediği bir çalışma ortamında, işe yarayacak bir şey olmadığından emin değilseniz, muhtemelen bu eylemleri gerçekleştirmek için daha isteksiz olmalısınız. O zaman bile, daha sonra hiçbir sorunun devam etmediğini doğrulamalısınız. Birkaç yıl önce, birisinin derlemeyen kaynak yapma konusunda hiçbir sıkıntısı olmayacak birçok programcıdan oluşan bir ekipte olduğumu düşünün ! 3 ay sonra onu vurarak öldürmek istedim.
Neil

Bunu uzak makinedeki bir kancada algılayabilir ve daha sonra değişiklikleri reddedebilirsiniz.
Andrew T Finnell


Sorunu anlamadım. Varsayılan mod güvenlidir. Siz belirtmedikçe itmenize izin vermez --force.
Šimon Tóth

Ben de böyle bir şey görmek istiyorum. Temelde ben sadece bu komut satırını sararak ve sadece temel açığa: taahhüt, çekme, itme, basit şeyler maruz daha güvenli bir sürüm git öğrenme sağlamak istiyorum. Bu sayfadaki herhangi bir şey için onları tam git'e zorlayın : git-scm.com/book/en/Git-Tools-Rewriting-History Git hakkında düşünmek için yerel ve uzak bir repoya sahip olmak için diğer araçlardan biraz daha zor. - geri alma yerine geri dönebileceğinizden korkmak korkutucu.
Chris Moschini

Yanıtlar:


5

Git Geçmişini Yeniden Yazma Önleme veya Yakalama Stratejisi ile aynı soru olmasa da bu çok yakın görünüyor

Özetlemek gerekirse

git config --system receive.denyNonFastforwards true

ve

git config --system receive.denyDeletes true

Ya da bir yeniden yazma olduğunu belirlediğiniz bir şey reddetmek için bir posta alma kanca yazın.


1
Ben inanmıyorum denyNonFastforwardsvarsayılan (?), denyDeletesDeğil. Bu ikisi faydalıdır, ancak beni commit --amenditmeyi engelleyecek bir iş yapmamı engelleyecek bir istemci tarafı çözümü hayal ediyorum (çünkü HEAD zaten itilmişti).
Kos

Başka bir deyişle: Bir uzaktan kumandayı tutarlı tutmaya izin veren mekanizmalara ek olarak, bir klonun uzaktan kumandayla "tutarlı" kalmasına izin veren bir şey istiyorum.
Kos

@Kos Yerel kancalar da oluşturabilirsiniz
Andrew T Finnell

Ayarlamak için bir yolu var mı denyNonFastfowardsüzere trueana dal üzerinde sadece? Konu şubelerimin yeniden temellendirilmesine ve zorla gönderilmesine izin vermek istiyorum.
nnyby

2

Hayır, çünkü size tam güç vermek ve bu gücü istediğiniz gibi yönetmenize izin vermek git git felsefesinin bir parçası.

Bu felsefeye bağlı kalmazsanız, belki de Mercurial'a geçmek, tarihin yeniden yazılmasına izin verdiği için değerli olacaktır, ancak sınırlı veya açık, isteksiz bir şekilde, bu iyi bir fikir olmadığını hissetmenizi sağlar.


2
Hatalar yapıyorum. Tehlikeli bir şey yaptığımda açıkça onaylamamı gerektiren bir mekanizma, "gücümü istediğim gibi yönetmeye" uygun bir şey. :-) (Ayrıca Git bunu zaten vesilelerle yapıyor.)
Kos

2

AFAIK, git'in bu sorunları çözme şekli, böyle bir eylemi her talep ettiğinizde, bunu yerel olarak gerçekleştirecek, ancak yaptığınız şeyin istenmeyen sonuçlara yol açabileceğini bildirecektir. Bu noktada, henüz hiçbir şey itmediniz, bu nedenle yerel deponuzu gözden geçirecek ve itmeden önce muhtemelen tehlikeli değişikliği geri alacaksınız. Git'in size ne söylediğine dikkat etmelisiniz ve bu hataları onarırken dikkatli olmalısınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.