2009-09-16 4 views
7

원격 서버에서 일부 데이터를 관리하기 위해 git을 사용하고자하므로 리포지토리를 설정해야합니다. 나는 문제없이 그것을 집어 넣을 수 있으며, 저장소 자체는 업데이트되지만 실제 파일은 변경/추가/삭제되지 않습니다. 나는 서버에 ssh를해야하고 파일 구조가 실제로 업데이트 할 얻을 수있는힘내 : 밀어 때 원격 디렉토리 업데이 트를 만드는 방법?

git reset --hard HEAD 

을한다.

무엇을해야합니까? 이

hooks

당신이 각 업데이트에 원하는대로 실행할 수 있습니다

답변

7

이렇게하면 안됩니다. 베어 리포 지 토리가있는 것이 좋습니다. 즉, 체크 아웃 된 파일이 없으며 .git 디렉토리 자체입니다. 그런 다음 서버의 다른 위치 (예 : 웹 루트)로 저장소를 체크 아웃 할 수 있습니다. 이렇게하면 얻을 수 있습니다.

  • git best practice. Git 문서에 따르면, 당신이 그것을 따르지 않으면 "예상치 못한 결과"를 얻을 수 있습니다. 좋은 프로그래밍을 마친 사람이라면 "예기치 않은 결과"가 "아마도 아이들을 먹을 것이므로 모든 비용을 들이지 않아야합니다"라는 코드임을 알고 있습니다.

  • 웹 서버에서 액세스 할 수있는 서버에서 체크 아웃 한 파일을 사용하려는 경우 보안을 강화하십시오.

  • 체크 아웃 코드의 로컬 수정과 체크 아웃 된 라이브 코드를 빠르게 변경할 수있는 기능. 저장소에서 직접이 작업을 시도 할 수도 있지만 오류가 발생하기 쉽고 복잡합니다.

  • 라이브 서비스 코드 업데이트와 독립적으로 서버 리포지토리를 업데이트하는 기능. 이것은 매우 중요합니다. 원격으로 작업하고 서버에 무언가를 보내고 라이브 서비스를 준비하기 전에 추가 작업을해야하거나 라이브 서비스 코드를 변경 한 경우 (예 : 다른 구성 설정) 이러한 변경 사항을 repo의 변경 사항과 병합해야하지만 지금은 할 수 없습니다.

나는 다음과 같은 단계를 권하고 싶습니다 :

  • 라이브 서비스 대상 디렉토리
  • 설정에 REPO에서 코드를
  • 확인을 베어 저장소를 설정에서 자식 문서를 따르를 저장소 업데이트시 실제 서비스를 업데이트하려면 git 후크 (post-commit은 올바른 IIRC 여야 함). 아마도 라이브 서비스 디렉토리에 cd하고 git pull --rebase를 수행하고 파일 권한을 설정해야합니다.
  • 지금부터 코드를 개발 상자의 repo로 푸시하십시오.
+0

매우 유용한 답변입니다. 감사! – Felixyz

+0

그러나 적어도 다양한 종류의 비 생산 설정에 대해서는 Brandon Rhodes의 대답을 참조하십시오. – Felixyz

3

는 업데이트 후 훅을 사용합니다.

+0

정확하게 생각했습니다. –

+0

감사합니다. 나는 이것을 성취 할 수있는 간단한 환경이 있기를 바랐다. 그러나 후크는 너무 단순 해 보인다. – Felixyz

1

힘내 버전 1.9.1
우분투 서버 (14).04 LTS
LAMP 서버

내 웹 개발자 중 하나가 서버에 변화를 못살게 굴지 때마다 내 망할 놈의 repo의 내 작업 디렉토리를 업데이트 할 내 LAMP 서버를 설정

. 로그에 새로운 커밋이 기록되지만 작업 디렉토리는 업데이트되지 않는 것으로 나타났습니다. 이 작업을 수동으로 수행하는 대신 (git checkout -f) 모든 업데이트에 대해 푸시를받은 후에 자동으로 설정할 수 있습니다. 당신의 ".git"디렉토리에서

  1. 는 "후크"폴더로 이동합니다.
  2. 이 내용은 "후크"폴더 내에 "포스트받을 수"라는 이름의 파일을 만듭니다!

    #/빈/SH

    # 업데이트 작업 디렉토리를 원격 클라이언트에서 푸시를받은 후.
    # 이것은 git 작업 디렉토리로 보내야합니다.

    GIT_WORK_TREE =은/var/www /에서 dev_site 자식 결제

  3. 는 "후크"폴더 "chmod를 + X는 이후 수신"을 입력하여 파일을 실행할 수있는 권한을 활성화 -f. 커밋이 망할 놈의 repo에 푸시 할 때

그것은 현재 작업 디렉토리를 업데이트합니다. 내 사이트는 이제 브라우저에서 변경 사항을 표시합니다.

은 내 작업 디렉토리는/var/www /에서 dev_site

+0

GIT_WORK_TREE 행은 작업 디렉토리를 가리켜 야합니다. –

+0

이것은 일반적인 Repo를위한 것이며 Repo는 아닙니다. 베어 레포에는 작업 디렉토리가 없습니다. –

3

이를 행복하게, 지금은 자식 자체에서 직접 지원됩니다! 당신은 그냥 upvoted 한이 답변의 세부 정보를 찾을 수 있습니다

https://stackoverflow.com/a/38363683/85360

그것은 그래서 업데이트 작업 복사본을 초래할 진행시키고

git config receive.denyCurrentBranch updateInstead 

와 리모컨을 구성하는 것이 좋습니다!

+1

정말 고마워! 나는 SO가 내가 잊어 버렸던 물건들을 어떻게 추적 하는지를 정말로 고맙게 생각한다. 나는 받아 들인 대답의 많은 점들이 여전히 유효하다고 생각한다. (아마도 "체크 아웃 된 코드에서의 실제 변화"는 아니지만) "프로덕션 사용"이 아닌 많은 상황에서 이것은 정말로 유용하다. – Felixyz