.gitconfig에 파일을 포함시킬 수 있습니까?


245

내 github 설정이있는 파일을 .gitconfig에 포함하고 싶습니다. 이것이 가능합니까?

이런 식으로 할 수 있습니까?

[core]
    include = /path/to/file

3
"github 세부 정보를 포함하고 싶지 않기 때문에 어떻게 든 외부 파일에서 세부 정보를 포함하고 싶은지": 바로 이것이 전역 구성 파일의 목적입니다. 귀하의 경우에 그것을 사용하지 않을 이유가 있습니까?
VonC

11
예, git 저장소에 .gitconfig를 게시하고 누군가 누군가 내 github 자격 증명을 훔치지 않기를 바랍니다.
David Reynolds

일반 gitconfig 파일이 GitHub의에 게시 될 것입니다 :하지만, 난 당신을 따르지 않는 없이 어떤 GitHub의 설정. 왜? 그것들은 전역 설정 파일 ( ~/.gitconfig)에있을 것입니다. 즉, github 저장소로 푸시되지 않았습니다 . ' git config' 를 입력 하면 3 개의 구성 파일 (리포지토리, 전역 및 시스템)이 연결됩니다. repo 구성 파일 만 푸시됩니다. 다른 2 명은 현지에 있습니다.
VonC

90
모든 사람 이이 질문의 요점을 놓친 것 같습니다 . David는 분명히 자신의 모든 .gitconfig를 포함하여 모든 도트 파일 (bashrc, gemrc 등)의 저장소를 밀어 내고자합니다. 개인 항목을 포함하고 무시하여 .gitconfig 파일의 일부를 푸시하는 방법은 다음과 같습니다.
Bo Jeanes

5
@ bjeanes : 정확히! 그래도 여전히 할 수있는 방법을 찾지 못했습니다.
David Reynolds

답변:


302

힘내 (1.7.10+)는 이제 다음 구문을 지원 합니다 .gitconfig:

[include]
    path = /path/to/file

git change 및 엣지 케이스에 대한 자세한 설명은 여기 를 참조 하십시오 .

그건 그렇고, 지적해야 할 몇 가지 미묘한 점이 있습니다.

  1. 예를 들어 환경 변수 확장 $HOME은 지원되지 않습니다. ( ~Git 1.7.10.2에서 확장이 나타남)

  2. 상대 경로가 지정되면 [include]명령문 이있는 .gitconfig 파일에 상대 경로입니다 . 이것은 체인 포함을 포함하여도 올바르게 작동합니다 ~/.gitconfig.

    [include]
        path = subdir/gitconfig
    

    그리고 subdir/gitconfig가질 수 있습니다 :

    [include]
        path = nested_subdir/gitconfig
    

    ... subdir/nested_subdir/gitconfig로드됩니다.

  3. git이 대상 파일을 찾을 수 없으면 오류를 자동으로 무시합니다. 이것은 의도적으로 설계된 것 같습니다.


7
실제로는 필요하지 않습니다 ~. 이것은 .gitconfig 파일이 여전히 ~/.gitconfig설정의 상대 경로에 있어야하기 때문입니다 ~...
robustus

2
~/의 $HOME확장은 현재의 사실입니다 git describe --contains 4c0a89fc> - v1.7.10.2~12^2(즉, v1.7.10.2그것이 데비안 7 보인다 우분투 계량 적 함께 발표 할 예정으로, 또는 그 이상) 주목할만한 v1.7.10.4.
FauxFaux

1
이것은 글로브를 지원합니까? 예를 들어 경로 = ~ / gitconfig.d / *?
Bret

1
@Bret no. 글로브를 지원하지 않습니다.
Mike Morearty

8
(like )로 명시 적으로 지시하지 않는 한 --global, 이러한 방식으로 포함 된 구성은 특정 파일이 제공 될 때 (즉 , --local또는로 --file) 표시되지 않습니다 . --includesgit config --global --includes --list
Franklin Yu

16

2012 업데이트 :

참조 마이크 Morearty대답 :

포함

특수 include.path변수를 포함 할 파일 이름 으로 설정하여 하나의 구성 파일을 다른 구성 파일에 포함시킬 수 있습니다.
포함 된 파일은 내용이 include 지시문의 위치에있는 것처럼 즉시 확장됩니다. 변수
값이 include.path상대 경로 인 경우 경로는 include 지시문이 발견 된 구성 파일에 상대적인 것으로 간주됩니다.
의 값은 include.path틸드 확장의 영향을받습니다. ~/는의 값 $HOME~user/지정된 사용자의 홈 디렉토리로 확장됩니다.


난 그렇게 생각하지 않아.

차라리 그 설정을 파일 에 넣을 것입니다~/.gitconfig

사용자 별 구성 파일 "글로벌"구성 파일이라고도합니다.

그렇게하면 GitHub로 푸시 될 때 게시되지 않고 .gitconfig 프로젝트 특정 파일을 완성합니다. 전역 설정 파일에 대한 자세한 내용은이 SO 답변 을 참조하십시오.
힘내 3 구성 파일이 있습니다 .


bjeanes 는 주석에 다음을 추가합니다.

모든 사람이이 질문의 요점을 놓친 것 같습니다.
다윗은 분명히 그의 모든 점 파일의 repo (밀어 싶어 bashrc, gemrc자신의 포함 등) .gitconfig자신의 모든 기계에 그래서 그는 모두를 가질 수 있습니다 자신의 설정을. 개인 항목을 포함하고 무시
하여 .gitconfig파일의 일부를 푸시하는 방법 은 그 (그리고 그 문제의 경우)가 따르는 것입니다.

가능한 방법은 smudge / clean 필터 드라이버 를 사용하여 개인 정보를 가진 하나의 파일을 해독 / 암호화 ( 이 스레드 참조 )하여 ~ / .gitconfig와 같은 로컬 파일을 해독 된 부분으로 완성하는 것입니다. 파일.

이렇게하면 모든 도트 파일과 암호화 된 정보가 포함 된 하나의 파일을 해독하여 해당 도트 파일에 추가 할 수 있습니다.

대체 텍스트

에서 .gitattributes(나 .git/info/a..) 사용 :

myPrivateInfosFile filter=gpg diff=gpg

repo .config 파일에서 :

[filter "gpg"]
smudge = gpg -d -q --batch --no-tty
clean = gpg -ea -q --batch --no-tty -r C920A124
[diff "gpg"]
textconv = decrypt

( GPG 기반 솔루션 은 물론이 특별한 저장소를 복제하여 모든 도트 파일을 복원하려는 대상 컴퓨터로 다른 방법으로 개인 / 공개 키를 통신했음을 의미합니다)

실제로, 귀하의 경우, 스머지 스크립트는 해당 파일의 암호를 해독 한 후 전역 ~/.gitconfig파일 에 관련 부분을 추가 하고 (글로벌 구성 파일을 다른 위치로 덮어 쓰지 않는 한 ) 또는 그에 대한 다른 도트 파일을 추가해야하므로 완료해야합니다. 문제.

https://kerneltrap.org/mailarchive/git/2008/3/13/1153274/thread (gpg 불편 사항은 이 글 에서 자세히 설명 합니다 ) ( 여기서 논의 된 것처럼 전체 암호화 된 Git 저장소를 갖는 것과는 다릅니다 )


5
기본 .gitconfig 파일을 git 저장소에 게시하고 싶지만 github 세부 정보를 포함하고 싶지 않으므로 외부 파일의 파일을 어떻게 든 포함하고 싶습니다.
David Reynolds

10

명령 행에서로드 할 수 있습니다.

$ git config --local include.path "/path/to/.gitconfig"

"$PWD"/.gitconfig현재 디렉토리에서 파일을로드 하려면 대신 사용하십시오 .

위 명령을 실행하면 .git/config파일에 다음 줄이 추가됩니다 .

[include]
        path = /path/to/.gitconfig

2

defunkt의 허브 도구를 사용 하여이 작업을 수행 할 수 있다고 생각합니다 . 이것은 무엇보다도 당신이 할 수있는 자식 명령에 대한 래퍼입니다 GITHUB_USERGITHUB_TOKEN환경 변수. 로컬 .gitconfig파일 의 설정을 무시 합니다.

그런 다음 ZSH 구성alias git=hub 에서 별명 을 지정한 사용자를 매끄럽게 만듭니다 . 그런 다음 환경 변수를 설정하는 로컬 파일을 소싱하고 모든 개인 정보를 그대로 유지하여 리포지토리를 공용 세계로 푸시 할 수 있어야합니다.

** OSX의 홈 브루 사용자에게는 참고를 통해 도구를 설치할 수 있습니다 brew install hub.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.