Gitignore kullanmadan Git'in dosyaları yoksaymasını nasıl sağlarsınız?


133

Dış tuhaf kısıtlamalar nedeniyle depomu değiştiremiyorum .gitignore. A'yı değiştirmek dışında dosyaları ve dizinleri yok saymanın bir yolu var mı .gitignore? Tüm depolarıma uygulanacak global konfigürasyon gibi global bir çözüm olsa bile.

Yanıtlar:


179

Gitignore'a göre Git'in düşündüğü farklı "görmezden gelen model kaynaklarında" bir öncelik sırası olduğunu unutmayın:

  • Desenler, onları destekleyen komutlar için komut satırından okunur.
  • Yol ile aynı dizindeki veya herhangi bir ana dizindeki bir .gitignore dosyasından okunan kalıplar, daha yüksek seviyeli dosyalardaki (köke kadar) daha düşük seviyeli dosyalardakiler, dosyayı içeren dizine kadar geçersiz kılınmıştır.
  • Kalıplar okundu $GIT_DIR/info/exclude.
  • Yapılandırma değişkeni tarafından belirtilen dosyadan okunan modeller core.excludesfile.

Son ikisi sorununuz için bir çözüm olabilir, ancak:

  • uzak bir depo için kopyalanmazlar
  • kalıplarını diğer kaynaklar tarafından geçersiz kılabilirler

(Ayrıca bu SO sorusuna bakın )


Diğer iki çözüm dizinin ( git update-index) güncellenmesini içerir :

Ancak, başka bir şubeyi ödünç aldığınızda veya siz git pull, bu "yoksay" durumu sıfırlanabilir. Dolayısıyla diğer seçenek:

İkisi arasındaki fark " Git - Arasındaki Fark ' assume-unchanged' ve ' skip-worktree' " bölümünde açıklanmıştır .


update-index --assume-unchanged@See stackoverflow.com/a/25253144/292408
Elijah Lynn

1
@ElijahLynn tabii. Senin de var update-index --skip-work-tree. Cevabı, bu iki update-indexkomutu örnekleyen eski cevaplarıma bazı bağlantılar eklemek için düzenledim .
VonC

142

Değiştirebiliyorsanız .git/info/exclude, aynı kuralları oraya da koyabilirsiniz. Ancak bu dosya yalnızca yerel deponuzdadır.


Görünüşe göre bu muhtemelen en iyi bahsiniz; yerel deponuzdan dosyaları dışlayalım.
Abizern

1
Bu, alt modüller ile nasıl çalışır? .git
Alt

10
@yourfriendzak bir alt modülün .gitklasörü aslında parent_repo/.git/modules/submodule_name. Eğer düzenleme olur Yaniparent_repo/.git/modules/submodule_name/info/exclude
Kara Brightwell

25

GIT'ye hangi dosyaların göz ardı edileceğini söylemenin üç yolu vardır:

  • .gitignore Dosyalar
  • $GIT_DIR/.git/info/exclude
  • core.excludesfileAyar aracılığıyla gösterilen dosyalar

Son iki nokta sorununuzu çözebilir.

Daha fazla bilgi için gitignore (5) bakın .


5

Depoda sadece bazı yerel dosyalara sahip olmak istiyorsanız ve alt dizin konumu esnekse, dosyalarınızı içine koyabilir tracked_dir1/tracked_dir2/untracked_dir/ve ardından aşağıdakiler tracked_dir1/tracked_dir2/untracked_dir/.gitignoregibi içeriğe sahip bir ekleyebilirsiniz :

*

yani

$ cat > tracked_dir1/tracked_dir2/untracked_dir/.gitignore
*
<Ctrl+D>

4

Ben de benzer durumlarda bulundum, bu yüzden bahsettiğim görmediğim tercih ettiğim çözümü ekliyorum. git update-index --assume-unchangedBu durumda sorun, izlenmemiş bir dosya için bunu yapamamanızdır. Dedin

Depomun .gitignore'unu değiştiremiyorum.

Ne demek istediğinizi, herhangi bir değişikliği .gitignorebaşlangıç noktasına itemeyeceğiniz olduğunu varsayacağım . Eğer durum buysa, yapabileceğiniz şey izlenmeyen dosyayı yerel dosyanıza eklemek .gitignore, o zaman yaptığınız git update-index --assume-unchanged .gitignoredeğişikliğin .gitignoreasla itilmemesi için yapın. Artık izlenmeyen (muhtemelen) dosyayı görmezden geliyorsunuz ve uzak .gitignoredosyayı etkilemiyorsunuz .


3

İzlenen dosyalardaki yerel değişiklikleri göz ardı edin: git update-index --assume-unchanged my-file.php

İzlenen dosyalardaki yerel değişiklikleri göz ardı edin: git update-index --no-assume-unchanged my-file.php

kaynak: git help update-index

--[no-]assume-unchanged
           ...
           This option can be also used as a coarse file-level mechanism to ignore uncommitted changes in tracked
           files (akin to what .gitignore does for untracked files). Git will fail (gracefully) in case it needs to
           modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is
           changed upstream, you will need to handle the situation manually.


1

Diğer yol:

  • yerel düzenle .gitignore
  • sonra git update-index --assume-unchanged .gitignore
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.