2012-11-02 1 views
1

나는 내가 좋아할만한 곳으로 가까이 다가 가려는 게시물을 읽었습니다. 하나의 서버가 있습니다. 여기에는 3 개의 웹 사이트가 있습니다 : www.domain.com, staging.domain.com 및 dev.domain.com. 나는 또한 local.domain.com에서 개발하고 GitHub를 나의 중앙 저장소로 사용한다.GIT_DIR 및 GIT_WORK_TREE을 설정하는 방법 동일한 서버에있는 Production, Staging, Dev 웹 사이트 및 git repos :

내 웹 사이트에서 내 git 리포지토리를 유지하고 싶습니다. 나는 이것을하는 방법을 공개적으로하고있다. 내가 노력하고있어입니다 :

/home/user/git/production.git 
/home/user/git/staging.git 
/home/user/git/development.git 

나는 단지 1 개 사이트와의 repo가 ​​GIT_DIR 및 GIT_WORK_TREE를 설정하여이 있다면이 작업을 수행하는 방법을 알고있다 (I는 .bash_profile에있는 경로를 보냅니다).

[core] 
    bare = false 
    worktree = /home/user/domains/www.domain.com/public_html 

그러나이 어떻게 GIT_DIR를 설정합니까 :

내가 좋아하는, 각 저장소의 config 내에서 작업 트리를 설정할 수 있습니다 보인다?

그래서 난/가정/사용자/도메인/WWW .domain.com에/public_html을에있어 및 git status 등, 그것은 생산 자식의 repo를 참조 것을합니다. 그리고/home/user/domains/준비가 .domain.com/public_html 인 경우 .git에 이 연결됩니다.

+0

이 방법으로 git을 사용하여 dev/staging/production 문제를 해결했습니다 ... 내 마스터 brnach는 devv 브랜치의 머리입니다 (저는 dev 로컬에서 ...). 그런 다음 구성 변경 내용을 스테이징으로 변경 한 분기를 작성한 다음 준비 분기에서 다른 분기를 작성하여 프로덕션에 대한 구성 변경을 작성합니다.매번 배포 할 준비가 될 때마다, 내 준비 분기 및 생산 분기를 내 dev 브랜치에 기록합니다 (역사적 이유로 버전을 태그로 지정한 후). 이렇게하면 모든 것을 멋지고 깔끔하게 정리할 수 있습니다. – g19fanatic

답변

3

$GIT_DIR을 설정하는 대신 gitlink 파일을 사용할 수 있습니다. 이렇게하려면 단순히 각 작업 트리의 루트로 가서 실행

echo "gitdir: /home/user/git/production.git" > .git 

이 웹 루트에 .git 파일을 초래할 것이지만, 사람이 접근하면 누설 할 유일한 것은 그 경로가 될 것입니다 저장소. 이렇게하면 어느 디렉토리에 있는지에 따라 $GIT_DIR 변수를 설정하여 게임을하지 않아도됩니다.

+1

Nifty! 전에는 본 적이 없어요. [gitrepository-layout man page] (http://www.kernel.org/pub/software/scm/git/docs/gitrepository-layout.html)에 대한 기능 설명. –

+0

와우, 그건 단순하고 매력처럼 작동합니다! 이 개발/자식 환경을 단계별로 설정하는 방법을 입력하고 싶습니다. 다른 사람들이 여기에서 찾은 모든 팁과 다른 곳에서 도움을 얻을 수 있습니다. 누구나 이것을 문서화하기에 좋은 장소를 제안 할 수 있습니까, 어쩌면 위키 스타일. 예 : Stack Overflow, GitHub, Gist 등 다른 사람들이 그것을 찾을 수 있고 기여할 수있는 좋은 장소입니까? –

0

무엇을하려고합니까?

/home/user/git/production.git에있는 경우 작업 디렉토리를 /home/user/domains/www.domain.com/public.html으로 감지하고 푸시/당기기/체크 아웃이 제대로 작동해야합니다. 불행히도 자식은 영리하지 않습니다. .git 폴더가없는 무작위 디렉토리에서 구성 파일을 찾을 위치조차 모르 십니다 (a "gitdir" file없이, 다른 답변에서 배웠습니다).

항상 git --git-dir=~git/production.git checkout ... 등을 전달할 수 있지만 자동화 된 솔루션을 찾고 있습니다.

쉘 스크립트에서 git을 래핑 해보세요. 당신은 무엇을 ~/bin/autogit으로 이것을 넣으면 :

#!/bin/bash 
DIR=$(pwd) 
if (fgrep -q domains/www.domain.com <<< "$DIR"); then 
    git --git-dir=/home/user/git/production.git [email protected] 
elif (fgrep -q domains/staging.domain.com <<< "$DIR"); then 
    git --git-dir=/home/user/git/staging.git [email protected] 
elif (fgrep -q domains/local.domain.com <<< "$DIR"); then 
    git --git-dir=/home/user/git/development.git [email protected] 
fi 
echo "Autogit failed from directory $DIR." 
exit 1  

(사이드 노트 : 당신은 세 가지의 repos을해야합니까 내가 찾은 이유는 일반적인 하나 개의 세 가지 다른 지점 이름의 repo, 각을 확인하는 스크립트가합니다)

+0

각기 다른 'HEAD'가 필요하기 때문에 각 작업 트리마다 repo가 ​​필요할 것입니다. 'contrib/workdir/git-new-workdir' 스크립트는'git.git'에서 다소 벗어나지 만 신중하게 사용하지 않으면 약간 위험 할 수 있습니다. – qqx

관련 문제