Git’le dosyayı “uygunsuz” olarak işaretleyin


41

Çalışmamın bir kısmını GitHub hesabıma yükleyerek göstermek istiyorum. Ancak, veritabanı bağlantıları gibi şifreler içeren bazı dosyalar vardır.

GitHub'da görünmemesi için bir dosyayı Git ile uyumlu olmayan bir şekilde işaretlemenin bir yolu var mı?


1
Maddi öneri: Bazıları konfigürasyon dosyalarıyla çok evli olduğu için bu her platformda geçerli olmayabilir, ancak bu parametreleri ortamda tutma konusunda 12factor yaklaşımını izlemeyi düşünebilirsiniz: 12factor.net/config . Diğer bir deyişle, uygulama kodunun hiçbir zaman bir yapılandırma dosyasının varlığını kabul etmemesini sağlayın. (Bunları belirleyen, ancak yerel makinenizi asla
terketmeyen

1
Yanlışlıkla onları taahhüt ederseniz, onları tamamen git geçmişinden kaldırdığınızdan emin olun (diğer sorular nasıl yapılacağını açıklar) çünkü silip görmezden gelseniz bile, eski işlenmiş sürüm tarihte kalır ve Github'da görünür olur.
curiousdannii

3
Tüm cevapların sorunuzu gerçekten cevaplamadığını unutmayın. Dosyayı uygunsuz hale getirmezler, sadece git'i varsayılan olarak yok sayacak şekilde yapılandırırlar. Ancak, bu dosya adını yanlışlıkla bir git komut satırına eklerseniz , içinde bir kalıpla eşleşse bile , bunu işleme koyabilirsiniz.gitignore . AFAIK git, her durumda belirli bir dosyayı işlemekten kaçınmak için % 100 tam kanıt yolu yoktur . Bu bir özellik olarak görünse de ... açık komutların genel yapılandırmaları geçersiz kılmasına izin veriyor.
Bakuriu

Kodlanmış şifreleri kaldırabilir ve daha güvenli bir alternatife geçebilirsiniz. Bundan sonra veritabanı şifrelerini değiştirebilirsiniz. Eski şifreler hala komisyonların içinde ama sizden daha fazlasını okuyabilen birileri eskiydi. Halen inşa edildikten sonra bir taahhüdü değiştiremeyeceğinize eminim.
BlueWizard

3
@Curiousdannii'nin söylediğine ek olarak GitHub, yanlışlıkla verdiğiniz hassas verilerin nasıl kaldırılacağı üzerine bir sayfa hazırladı. Diğer sayfaların yanı sıra, bu sayfa yanlışlıkla yayımladığınız tüm şifreleri ve anahtarları değiştirmeyi söylüyor . help.github.com/articles/remove-sensitive-data
Kevin

Yanıtlar:


67

GitHub'da görünmemesi için bir dosyayı Git ile uyumlu olmayan bir şekilde işaretlemenin bir yolu var mı?

İlk olarak, yerel Git deponuzda bazı dosyaların ve işlemlerin görünmesine izin verilmez, ancak bir şekilde GitHub'da görüntülenemez; Git'te işlenmiş bir dosyanız varsa, GitHub'da görünecektir.

İkincisi, tek bir dosyanın kendisini “rahatsız edici” olarak işaretlemesinin basit ve pratik bir yolu yoktur. Ancak Git deposundaki bir dosyayı görmezden gelmenin kesinlikle bir yolu yoktur. gerekli - bir .gitignoredosyaya :

Bir .gitignoredosya, Git'in göz ardı etmesi gereken kasıtlı olarak izlenmemiş dosyaları belirtir. Git tarafından zaten izlenen dosyalar etkilenmez; Ayrıntılar için aşağıdaki notlara bakınız.

Basit .gitignorebir metin dosyası oluştururken temel oluşturmak oldukça kolaydır. Yani - örneğin - kökünüzde bir config.phpdosya olsaydı, bunu yapardınız; PHP kullandığınızı varsayalım ancak konsept herhangi bir kurulum için geçerlidir. Ayrıca Nano'yu bu örnekte metin editörüm olarak kullanıyorum ancak normalde bunun için kullandığınız metin editörünü kullanmaktan çekinmeyin:

nano .gitignore

Ve sadece bu dosya adını bu dosyaya ekleyin:

config.php

Kaydet ve şimdi Git bu dosyayı görmezden gelecektir.

Bununla birlikte, bunun gibi kurulumlar için ne yapmak istediğimi, depodaki hassas özelliklere ayrılmış bir örnek / örnek yapılandırmayı saklamaktır, bu nedenle, yapılandırma dosyası biçiminin şunun gibi bir dosya olduğu konusunda bazı referanslarım vardır:

config.SAMPLE.php

Bu şekilde, config.phpdosyanın nasıl ayarlanacağını tam olarak bilirsiniz config.SAMPLE.phpve config.phpgerçekin Git tarafından asla dokunulmadığından emin olabilirsiniz .

Ayrıca, kodunuzu göstermeyi planlıyorsanız, birisinin bu kodu alıp bir şekilde kendi sistemine uygulamaya çalışmasını beklemeniz gerekir. Unutmayın, biz siz değiliz ve deponuzda örnek bir config dosyası olmadan, millet kodun kendi başlarına nasıl uygulanacağını gerçekten anlamayacak. Heck, temel bir yapılandırma örneği sağlamadığınız için yetkin olmadığını düşünebilirler.


11
Doğru cevap için +1 ve örnek bir yapılandırma dosyası önerin. Ruby için Figaro gibi bazı kütüphaneler var, bu yönde dürtmek. Gerçek değerlere benzer değerlere sahip örnek bir dosyaya sahip olmalısınız, böylece kodunuza bakan kişi çevrenin nasıl görünmesi gerektiğini bilir. Heroku gibi bazı platformlar ortam değişkenleri kullanır, bu nedenle yapılandırmanızı bunun gibi bir şeye ayarlayabilir database_url = Environment.DATABASE_URLve yukarıdaki gibi bir yorum bırakabilirsiniz # postgres://username:password@localhost/dbname.
Chris Cirefice

@ChrisCirefice Teşekkürler! Bana her zaman beni şaşırtıyor, yeni “araçların” ortaya çıkacağını açıkça hatırlatması gerekiyor: “Eğer bu kod diğer insanlar tarafından okunacaksa, bir yapılandırmanın tam olarak nasıl çalıştığını açıklamıyorsanız? Tekrar teşekkürler.
JakeGould

27

Ayrıca, akıl sağlığı kontrollerini uygulamak için ön işleme kancası ekleyebilirsiniz. .git/hooksHer git deposunun dizininin bazı örnek komut dosyaları vardır.

Çağrılan komut dosyası pre-commit, her bir göreve başlamadan önce varsa yürütülür ve sıfır olmayan bir geri dönüş değeri taahhüdü iptal eder.

Örneğin, bunun gibi basit bir komut dosyası olabilir:

#! /bin/sh -e
git ls-files --cached | grep -qx 'filename' && { echo "Excluded file included in the commit" >&2; exit 1; }
exit 0

Ve bu filenameeşleşirse, taahhüt başarısız olur.


1
+1 bu, açıkça dosyayı eklemeyi ve taahhüt etmeyi önleyen doğru cevaptır.
R. ..

Gerçekten de, önerilen uygulama olsa da, bu önlemin uygulanmasına güvenmek değildir (yani yerine `.gitignore kullanın).
David Z

2
@R .. Evet ve hayır. Soru, “bir dosyayı bulaşıcı olarak işaretlemek” anlamına gelirken, ruh “bir dosyanın işlenmesini engellemek” şeklindedir .gitignore. Ancak ön-işlem betiği Git'in çoğu kullanıcısı tarafından kullanılmaz. Bir miktar kurulum bilgisi gerektiriyor ve bunun gibi bir yöntemin basitçe bir .gitignoredosyayı kullanmak için tercih edilmesinin bazı gerçek nedenlerini gerektiriyor . Ancak bu, daha karmaşık bazı durumlar için çok kullanışlıdır, ancak kesinlikle kullanmanız gerektiğini bildiğiniz zaman kullanacağınız bir kavramdır.
JakeGould

2
% 100 güvenemeyeceğiniz durumlarda bunu görebiliyordum .gitignore (kazayla aptalca bir şey yapabilirsin, gitme dosyasını ekleyiniz). Belki de başka biri .gitignore dosyasını düzenleyebilir (sonuçta sürüm kontrolü altındadır). Test edilebilir bir sürece gerçekten ihtiyacınız varsa, bu böyle bir süreçte çalışabileceğiniz bir şeydir.
Cort Ammon

@CortAmmon her zaman güven ile ilgili değil. Kaynak kodunuza, taahhüt etmek istemediğiniz ancak böyle bir dosyayı görmezden gelemeyeceğiniz bazı geçici ve halka açık hata ayıklama bilgileri ekleyebilirsiniz. Bunun yerine, yasadışı bir şey içermediğini taahhüt etmeden önce kontrol etmek istersiniz . Bu, bu kullanım durumu için iyi bir çözüm gibi görünüyor. Ve bir gerçek olarak, bu soruyu bu şekilde buldum, çünkü bu benim kullanım durumum.
t3chb0t

12

@JakeGould ne dedi. Bazı durumlarda , aşağıdaki gibi ayarlanabilen skip-worktreeveya gibi özel dosya bitlerinden de yararlanabilirsiniz assume-unchanged; ikisi arasındaki farklar için, bu Yığın Taşması cevabına bakınız :

git update-index --assume-unchanged <file>

Bu, daha önce var olan bir dosyaya ek değişiklikler gizleyecektir ve her çekmeden sonra bir dosyanın gerçekten orada olmasını istiyorsanız, kullanabileceğinizi. Ancak, yalnızca ne yaptığınızı gerçekten biliyorsanız, kullanmanızı öneririm.


8

Bir .gitignorebenzer kullanın @JakeGould dedi. Ayrıca, bazı ilgili bilgiler:

  • .gitignoredosyaların izlenmesini engeller; Zaten izlenmişse git rm --cached, bunları kaldırmak için kullanın .
  • içindeki dosyalar / desenler $GIT_DIR/info/excludede dikkate alınmaz
  • Kullanıcının core.excludesFile tarafından belirtilen dosyadaki dosyalar / desenler ~/.gitconfigde dikkate alınmaz.

Daha fazla ayrıntı için resmi Git belgelerine bakın.


2

Jake'in ve 46'nın cevaplarını genişletmek için: çok iyi bir uygulama, özel bilgileri içerdiğiniz dosyalar için kullandığınız tutarlı bir uzantıya .gitignoresahip olmak ve bu uzantıya sahip dosyaları global olarak her zaman hariç tutmak için kullanmaktır ( .gitconfigdosyayı her zaman yoksaymak için başka bir yerde belirtildiği gibi kullanmaktır). kullanıcı için).

Bu şekilde örneğin;

/projectname/mypasswords.exc 

ve *.excgenel olarak dışladıysanız, o dosyayı tek tek hariç tutmayı unutsanız bile, bunun taahhüt edilmeyeceğini biliyorsunuzdur.

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.