Depomda işlemek istemediğim bir dosyada yerel değişiklikler yapıyorum. Uygulamayı bir sunucuda oluşturmak için bir yapılandırma dosyasıdır, ancak farklı ayarlarla yerel olarak oluşturmak istiyorum. Doğal olarak, dosya her zaman için bir durum olarak 'git durumunu' yaptığımda görünür. Bu değişikliği saklamak ve taahhüt etmemek istiyorum. Dosyada başka değişiklik yapmayacağım. etrafında kazma bazı sonra Git - 'Assume-unchanged' ile 'Skip-worktree' Arasındaki Fark
, ben 2 seçeneği görmek: 'skip-worktree' '-değişmeden farz' ve. Önceki bir soru here onlardan bahseder, ancak farklılıklarını gerçekten açıklamıyor. Benim sorum şu: İki komut nasıl farklı? Neden biri birini veya diğerini kullanır?cevap
skip-worktree
.
assume-unchanged
o dosyaların bir grup modifiye edilmiş olup olmadığını kontrol etmek pahalıdır durumlar için tasarlanmıştır; biti ayarladığınızda, git
(tabii ki), indeksin o kısmına karşılık gelen dosyaların çalışma kopyasında değiştirilmediğini varsayar. Dolayısıyla, stat
çağrılarının karmaşasını önler. Bu bit, dosyanın dizindeki girdisi değiştiğinde kaybolur (böylece, dosya yukarı yönde değiştirildiğinde).
skip-worktree
daha fazlasıdır: git
dizinden sürümünü kullanarak, dosya değiştirilmiş olduğunu bilir (ya da reset --hard
ya da benzeri ile değiştirilmesi gerekiyor) olmamıştır, onu taklit edecek durumlarda bile yerine. Bu, dizin atılana kadar devam eder.
burada bu farkın sonuçlarıyla ve tipik kullanım durumları iyi özeti vardır: http://fallengamer.livejournal.com/93321.html. Bu makaleden
:--assume-unchanged
varsayar bir geliştirici değil değişiklik dosya gerektiği. Bu bayrak, SDK'lar gibi klasörleri değiştirmeyen öğeler için performansı artıran anlamına gelir. Eğer geliştiriciler değiştirmek gerekir şimdiye çünkü belirli bir dosyayı dokunmamaya budala talimatını--skip-worktree
yararlıdır. Örneğin, ana depo yukarı üretim bazı hazır yapılandırma dosyalarını barındıran ve yanlışlıkla bu dosyaları değişiklikleri yapmak istemiyorsanız,--skip-worktree
tam olarak ne istediğinizi.
Bu mantıklı. Atla-worktree gerçekten gitmek için bir yol gibi görünüyor. Teşekkürler! – ckb
İki komutla ilgili daha fazla bilgiyi [git-update-index (1) El ile Sayfa] 'da bulabilirsiniz (http://git-scm.com/docs/git-update-index). – Senseful
Arama ve okuma birkaç saniye kaydetmek için küçük bir not. '--skip-worktree' efektlerini iptal etmek ve bayrağı kaldırmak için' -no-skip-worktree' seçeneği vardır. Tam olarak aynı şekilde çalışır. Bu, bir elin kayması ve yanlış dosyaların işaretlenmesi veya koşulların değişmesi ve daha önce atlanan dosyaların artık göz ardı edilmemesi durumunda yararlıdır. – drdaeman
Not: fallengamer (böylece modası geçmiş olabilir) 2011 yılında bazı testler yaptı ve burada yaptığı findings şunlardır:
- Dosya yerel depoda ve memba hem değiştirilir
Operasyonlar Zaten yerel değişiklikleri koruyan Git, zaten varsa, yerel değişiklikleri koruyor.
Böylece, herhangi bir bayrakla işaretlediğiniz herhangi bir veriyi kazara kaybetmezsiniz.assume-unchanged
bayrağıyla- Dosya: Git yerel dosyanın üzerine olmaz. Bunun yerine çıkar çatışmaları çıktı ve bunların nasıl çözüleceğini önerdi
- Dosya
skip-worktree
flag: Git yerel dosyanın üzerine yazılmaz. Bunun yerine çıkış çatışmalar ve tavsiyeleri onları
çözmek için nasıl.
- Dosya zaten
git stash
git pull
bazı ekstra manuel çalışmalarındaskip-worktree
sonuçları kullanarak ama en azından herhangi bir veri kaybetmek olmaz çekmeye çalışıyordu, yerel depoda ve memba hem değiştirilir yerel değişikliklerin varsa.assume-unchanged
bayrağıyla- Dosya: onları geri olanağı olmaksızın tüm yerel değişiklikleri atar. Efekt, ‘
git reset --hard
’ gibidir. ‘git pull
’ çağrısıskip-worktree
bayrağıyla - Dosya başarılı olacaktır: Stash
skip-worktree
dosyalar üzerinde işe yaramaz. 12git pull
’, yukarıdakiyle aynı hatayla başarısız olacaktır. Geliştirici, başarısız olanpull
'u saklamak ve tamamlamak içinskip-worktree
bayrağını el ile sıfırlamaya zorlanır.
- Dosya: onları geri olanağı olmaksızın tüm yerel değişiklikleri atar. Efekt, ‘
.
- Hiçbir yerel değişiklikler, memba dosya üst düzey değişiklikleri almanızı önleyebilir olmaz
git pull
Hem bayraklar değişti. Git,assume-unchanged
sözünü bozduğunuzu algılar ve bayrağı sıfırlayarak gerçeği yansıtacak şekilde seçer.assume-unchanged
bayrağıyla- Dosya: İçerik güncellenir, bayrak kaybolur.
‘git ls-files -v
’, işaretinH
olarak değiştirildiğini gösterir (h
). - Dosya
skip-worktree
bayrak: İçerik güncelleştirildi, bayrak korunuyor.
‘git ls-files -v
',pull
numaralı telefondaki gibi aynıS
bayrağını gösterir.
- Dosya: İçerik güncellenir, bayrak kaybolur.
.yerel bir dosya ile
assume-unchanged
dosya için (dosya aslında değiştirildi değişmeden olmak için söz verdi)skip-worktree
dosya dokunmazgit reset --hard
Git
değişti ve gerçeği yansıtır.assume-unchanged
bayrağı ile- Dosya: Dosya içeriği döndürülür. Bayrak
H
olarak sıfırlandı (h
'dan). - dosyasıyla dosya
skip-worktree
flag: Dosya içeriği bozulmamıştır. Bayrak aynı kalır.
- Dosya: Dosya içeriği döndürülür. Bayrak
Ertesi analizi ekler: skip-worktree
olduğunu yerel verilerinizi korumak için çok sıkı çalışıyor gibi
görünüyor. Ancak güvenliyse akışaşağı değişikliklerini almanızı engellemez. Git, bayrağı
pull
numaralı telefondan sıfırlamıyor.
Ancak ‘reset --hard
'komutunu göz ardı etmek, bir geliştirici için kötü bir sürpriz olabilir.Assume-unchanged
bayrakpull
operasyon kaybolabilir ve bu tür dosyaları içinde yerel değişiklikler git'e önemli olduğu görünmüyor.
Bkz:
- Junio's (current git maintainer) comment regarding intent of
assume-unchanged
, - difference between
assume-unchanged
andskip-worktree
as discussed in git mailing list upon addition ofskip-worktree
patch.
da buraydı bayrakların Aslında
ne kadar sezgiseldir.
assume-unchanged
bir geliştirici bir dosyayı değiştirmek gerektiğini varsayar. Bir dosya değiştirildiyse - bu değişiklik önemli değildir. Bu bayrak, SDK'lar gibi değişmeyen klasörler için performansın iyileştirilmesi anlamına gelir.
Ancak söz verilmişse ve bir dosya değiştirilmişse, git gerçekliği yansıtacak şekilde bayrağı geri alır. Muhtemelen, genellikle değiştirilmemesi gereken klasörlerde tutarsız bayrakların olması iyi olur. Hiç belirli bir dosyayı dokunmamaya budala talimatını Öte yandanskip-worktree
günü- yararlıdır. Bu zaten izlenmiş bir yapılandırma dosyası için kullanışlıdır.
Upstream ana deposu bazı hazır kullanıma hazır yapılandırmayı barındırır, ancak bazı yerel sınamalar yapabilmek için yapılandırmadaki bazı ayarları değiştirmek istersiniz. Ve bu dosyadaki değişiklikleri üretim yapılandırmasını etkilemek için yanlışlıkla kontrol etmek istemezsiniz.Bu durumdaskip-worktree
mükemmel bir sahne yapar.
Bir dosyada atlama-worktree varsa ve akış yukarı yönde değişirse, git durumu dosyayı değiştirilmiş olarak bildirmese bile, çekmeye çalıştığınızda "lütfen işlemi gerçekleştirin veya stash" yazın. Bunu nasıl önleyebilirsiniz ki, insanlar menşeindeki üretim ayarları ile uğraşırken yerel değişiklikler devam edebilir mi? – GreenAsJade
@GreenAsJade Emin: Bu kendi başına iyi bir soru olurdu (buna bir bağlantı ile). "Skip-worktree" yerine "değişmeyen" ile benzer bir mesaj alacağınızı varsayalım. – VonC
Evet, yaptığını onaylayabilirim. Bu, kökeni farklı bir şekilde korumak istediğiniz yerel bir dosyaya sahip olmanızın hala çok zor olduğu anlamına gelir. – GreenAsJade
- 1. arasındaki fark
- 2. Git işlemi ile çalışma dizini arasındaki fark nedir?
- 3. Git vimdiff ve vimdiff2 arasındaki fark nedir?
- 4. Git/Git Uzantısı'nda "squash" ve "fixup" arasındaki fark nedir?
- 5. Git filtre dalı ve git alt ağacı arasındaki fark nedir?
- 6. Smalltalk'taki fark ile Smalltalk arasındaki fark nedir?
- 7. page_load ile onLoad arasındaki fark
- 8. = ile mysql arasındaki fark nedir?
- 9. OnTouchListener ile OnClickListener arasındaki fark
- 10. JavaFX ile Vaadin arasındaki fark
- 11. Asfreq ile resample arasındaki fark
- 12. CURRENT_TIMESTAMP ile GETDATE() arasındaki fark
- 13. Referans ile & * arasındaki fark nedir?
- 14. Satır_dizisi ile result_dizisi arasındaki fark
- 15. UserTransaction ile EntityTransaction arasındaki fark
- 16. difftime ile '-' arasındaki fark nedir?
- 17. arasındaki fark
- 18. Git getirme kaynağı ile git uzaktan güncelleştirme kaynağı arasındaki fark nedir?
- 19. arasındaki fark?
- 20. arasındaki fark?
- 21. arasındaki fark
- 22. arasındaki fark
- 23. arasındaki fark
- 24. arasındaki fark
- 25. arasındaki fark
- 26. arasındaki fark
- 27. arasındaki fark
- 28. arasındaki fark
- 29. arasındaki fark
- 30. arasındaki fark?
Genellikle benzer amaçlar için '.gitignore' kullanıyorum. Bu çözüm sizin için çalışır mı? – samuil
samuil, .gitignore eklemeyi değil, değiştirmeyi göz ardı ediyor. Dosya zaten git gitmişse, bu olay listelendiyse, izlenen olay izlenir. – Grigory
@Grigory Bunu bilmiyordum. Teşekkürler! –