2013-07-05 18 views
7

Gitte yeni olduğum için lütfen benimle birlikte ol.Bir dummy dosyasını git repo'ya nasıl yerleştiririm?

Sürüm verileri denetiminde hassas verileri içeren bir dosya var diyelim. Tabii ki, bu dosyayı .gitignore dosyasına koydum, bu yüzden repo'ya zorlanmıyor. Sorun şu anda projemde bir yerlerde

ya da dil seçiminiz ne olursa olsun. Sorun, birisinin bu repodan klonlandığı, bu dosyanın eksik olduğu ve çözümü oluşturmaya/derlemeye çalışırken önemli bir hata almasıdır.

Yani, bunun yerine bunu yapacağımı nasıl

// replace the next line with the sensitive data!!! 

gibi bir yorum yerleştirmek Aslında ben yerine aynı adla bazı kukla dosya itmek istiyor üzerinde çalışıyorum dosyayı, itme?

cevap

7
Sen içeriğini filtre .gitatrributes kullanabilirsiniz

: Ben attı

  • .gitattributes

    secrets.h filter=secret merge=keepMine 
    
  • .git/config

    [filter "secret"] 
    clean = echo "// replace the next line with the sensitive data" 
    smudge = cat 
    
    [merge "keepMine"] 
        name = always keep mine during merge 
        driver = /bin/true %O %A %B 
    

bir ' keepMine 'yanlışlıkla birleştirmeleri önlemek için birleştirin. Ancak, AFAIK birleşmesi, clean filtre adımı nedeniyle yerel değişikliklerin etkili bir şekilde 'görünmez' olacağından tekme atmamalıdır. Ne olursa olsun secrets.h aslında ne olduğu, repo dosyası her zaman içerecektir:

// replace the next line with the sensitive data 

Örn .:

/tmp/work$echo '// agent 007 reporting for duty' > secrets.h
/tmp/work$git status -s
M secrets.h
/tmp/work$git diff
/tmp/work$git cat-file -p HEAD:secrets.h
// secret contents not in repo

+0

harika! Teşekkürler! – lightxx

+2

Başlıklar: '.git/config' dosyaları yereldir. Bu repoda tüm kullanıcıların filtre tanımları olduğundan emin olmalısınız, çünkü .gitattributes 'repodadır. Daha fazla bilgi için [git-öznitelikleri man sayfasını] (https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html) okumak isteyebilirsiniz – sehe

0

C++ önişlemci bu burada (i yukarıda gösterilen kod bazı c tarzı önişlemcisinden içindir varsayılması), ancak yapmanın mümkün olup olmadığını bilmiyorum i benzer durumlarda ne:

GIT'de taahhüt:

  • default.config
  • user.config.gitignore şablon

koymak:

  • user.config

ve sonra ben temelde yapan kodlar vardır:

if (file_exists(user.config)): 
    use user.config 
else: 
    use default.config 

bu şekilde ben bazı mantıklı varsayılan sağlayabilmektedir ve geçersiz kılmak için basit ve temiz bir yol var.

+1

Girişiniz için teşekkürler. Sizinle aynı hatlar boyunca bir şey düşünüyordum, fakat daha sonra, kaynak kontrol sorunlarını gerçek koddan ayırmak istediğimden, buna karşı karar verdim. Sadece bir başkasının bu rotayı yapmak istemesi durumunda bütünlük adına, makefile'de böyle bir şey kullanılarak yapılabilir: http://stackoverflow.com/a/142926/899260 – lightxx