2011-03-29 4 views
7

단순히 빈 .gitignore 파일을 만져서 커밋함으로써 "빈"초기 커밋으로 모든 git 저장소를 시작하고 싶습니다. 내 이유는 this question과 거의 같습니다. Baiscally, 첫 번째 커밋 ("꼬리")에는 부모 커밋이 없으므로 다른 커밋에서 발생하지 않을 다양한 이상하고 예기치 않은 일이 발생합니다.git init 후에 빈 .gitignore 파일을 자동으로 커밋 하시겠습니까?

그렇다면 모든 init git init을 따르는 데 사용할 수있는 post-init 후크와 같은 것이 있습니까? touch .gitignore && git commit .gitignore -m "Initial commit"? 아니면이 일을 내 자신의 사용자 지정 초기화 명령을 작성해야합니까?

답변

13

레포에서 커밋을하려면 git init을 사용하지 마십시오. 빈 레포지스가됩니다! 대신 git clone을 사용하십시오. 그냥 비어있는 gitignore 커밋으로 하나의 저장소를 만들고,이 특별한 빈 저장소를 원할 때마다 복제하십시오. (당신은 어디서든 사용할 수 원하는 경우 GitHub의에서 공개적으로 호스팅 할 수 있습니다.)

또는 로컬 컴퓨터에, 당신이 원하는 것을 위해 자식 별명을합니다

[alias] 
    myinit = !git init && touch .gitignore && git add .gitignore && git commit -m "empty gitignore" 

주 당신이 할 수없는 별명은 내장 명령과 같은 이름입니다.

+0

'git status &>/dev/null ||'또는 그 앞에 접두어를 붙이면 git repo가 ​​현재 디렉토리에 이미 존재하면'myinit' 명령은 no-op가됩니다. –

+0

@Ryan : 원한다면 그렇게 할 수는 있지만,별로 중요하지 않습니다. 기존의 repo에서'git init'은 템플릿 (특히'.sample' 후크)을 복사하고 디렉토리 구조를 생성합니다 효과적 일 것입니다). 접두어를 붙이면'git status '는 원하는 것이 아닙니다. 무엇보다도 느립니다. 나는'git rev-parse HEAD &>/dev/null'을 권하고 싶다. 이것은'HEAD'가 커밋을 가리키는 repo에서만 성공합니다. 즉,'git init'을 이미 실행했다면 실패 할 것이므로 나머지 단계가 일어납니다. – Cascabel

+0

오, 당신이 게시 할 수 있습니다 [여기] (http://stackoverflow.com/questions/5491832/how-can-i-check-whether-a-git-repository-has-any-commits-in-it) so 대답으로 받아 들일 수 있습니까? –

3

git init을 수행하면 .git 디렉터리 (후크 포함)는 기본값으로 초기화됩니다. 따라서 git init 다음에 후크가 없습니다. 가상의 "post-init"훅은 hooks 디렉토리가 초기화되고 (그리고 활성화 된 훅을 포함하지 않는) 지점에서 실행될 수있는 유일한 시간이기 때문에 쓸모가 없습니다.

후크가 적절한 해결책이 아니기 때문에이 작업을 수행하는 사용자 지정 명령을 작성하는 것이 더 나을 것 같네요.

+0

그래, 나는이 자식이 후크라고 말하는 것은이 문제에 접근하는 올바른 방법이 아니라고 생각했다. 그런 이유로 나는 * git init을 실행 한 후 커스텀 행동을 유발할 방법을 의미했다. –

3

꽤 아니지만 작동 할 것입니다. repo를 초기화하려면 다음 두 명령을 실행하십시오.

git init 
touch .gitignore 

그런 다음 반드시 자식이 gitignore 파일 실행을 추적 할 수 있습니다 : 당신이 당신의 repo를 설정하는 방법에 따라

git add .gitignore 
git commit .gitignore -m "Adding .gitignore" 

, 당신은 어쨌든 두 번째 두 개의 명령을 수행 할 수있다.

관련 문제