2013-07-05 7 views
7

저는 신세가되었습니다. 제발 저를 참아주십시오.git repo에 더미 파일을 삽입하려면 어떻게해야합니까?

민감한 데이터가 포함 된 버전 제어 파일이 있습니다. 물론, 필자는 .gitignore 파일에 해당 파일을 저장하므로 repo에 푸시되지 않습니다. 문제는 지금 내 프로젝트에 내가

#include <sensitivedata> 

이든 선택의 언어가 같은 라인을 가지고 곳입니다. 문제는 누군가가 해당 repo에서 복제 할 때마다 해당 파일이 누락되어 솔루션을 빌드/컴파일하려고 할 때 치명적인 오류가 발생합니다.

그래서 대신 내가 이런 짓을 했을까 방법

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

같은 코멘트를 배치 실제로 내가 대신 같은 이름을 가진 일부 더미 파일을 푸시 할 일하고 있어요 파일을 밀어?

답변

7
당신은 내용 필터링 .gitatrributes을 사용할 수

: 나는 던졌다

  • .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 
    

을에 ' keepMine '이 병합되어 실수로 병합되는 것을 방지합니다. 그러나 AFAIK 병합은 심지어 clean 필터 단계로 인해 로컬 변경 사항이 효과적으로 '보이지 않음'때문에 병합되지 않습니다. 에 관계없이 secrets.h 실제로 무엇의의의 repo 파일은 항상 포함됩니다

// replace the next line with the sensitive data 

예컨대 :

/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

굉장! 감사! – lightxx

+2

헤드 업 :'.git/config' 파일은 로컬입니다. '.gitattributes'가 repo에 있기 때문에이 repo의 모든 사용자가 필터 정의를 가지고 있는지 확인해야합니다. 자세한 내용은 [git-attributes 맨 페이지] (https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html)를 참조하십시오. – sehe

0

는 C++ 전처리이 여기에 (내가 위의 코드는 일부 C 스타일의 프리 프로세서에 대한 가정)에 불과하다 할 수 있는지 모르겠어요 나는 유사한 경우에 무엇을 :

이 자식 커밋 :

  • default.config
  • user.config.gitignore에서 템플릿

넣어 :

  • user.config

후 나는 기본적으로 수행하는 코드가 있습니다

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

그런 식으로 내가 어떤 재치있는 기본을 제공 할 수 있습니다 그것을 무시하는 간단하고 깨끗한 방법이 있습니다.

+1

입력 해 주셔서 감사합니다. 나는 당신과 같은 줄을 따라 뭔가를 생각하고 있었지만 실제 코드와 소스 제어 문제를 완전히 분리하기를 원했습니다. 다른 사람이 그 경로를 가고 싶다면 완성을 위해 makefile에서 다음과 같은 것을 사용하면됩니다. http://stackoverflow.com/a/142926/899260 – lightxx