저장소 외부의 위치에 Git 파일 체크 아웃


21

리포지토리 외부의 위치를 ​​"체크 아웃"할 수 있습니까? 의미하는 것은“.git”디렉토리가없는 분기의 복제입니다.

예를 들어 : git을 사용하여 웹 사이트를 관리하십시오. WebDAV를 통해 일부 파일을 편집하고 파일을 커밋하고 웹 서버에 복사합니다. WebDAV 경로는 리포지토리 외부 위치이며 ".git"을 포함해서는 안됩니다.

이것은 git이 빌드 된 문제는 아니지만 가능합니까?

답변:


19

네, 가능합니다.

/srv/production.git대상 시스템 / 서버에 베어 리포지토리가 있다고 가정 해 봅시다 .

대상 시스템에서 다음 명령을 사용할 수 있습니다 cd /srv/production.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f

비 Bare 저장소에 있으면 명령이 약간 다릅니다. 에 비 베어 리포지토리가 있다고 가정 해 보겠습니다 /srv/testing. 내가 사용할 것이라고 체크 아웃cd /srv/testing/.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f

사실 내 시스템에서는 production.git저장소의 커밋 후 후크에서이를 자동화하기까지 합니다. 따라서 production.git최신 버전으로 푸시 하면 웹 루트에 자동으로 체크 아웃됩니다.

#!/bin/sh
#
# An example hook script that is called after a successful
# commit is made.
#
# To enable this hook, rename this file to "post-commit".

GIT_WORK_TREE=/srv/production-www/ git checkout -f
# ... misc other commands to verify permissions are set correctly.

원격 시스템에 대한 유일한 액세스 권한이 webdav 인 경우 webdav 호스트에 직접 또는 임시 위치로 체크 아웃 할 커밋 후 후크를 작성할 수 있어야합니다. 그러면 업로드를 스크립팅 할 수 있습니다.


여러 곳에서 검색 할 수 있습니다.
karthikeayan

6

파일 만 원하면을 사용할 수 있습니다 git archive. 일반적으로 tarballs 또는 ZIP과 같은 아카이브에 기록하지만 파이프로 파이프 할 수도 있습니다.

git archive master | tar -x -C /some/path

여기에는 master분명히 보관하려는 지점 /some/path이 있으며 파일 만 포함됩니다 (no .git또는) .gitignore.


또는 git checkout-index파일의 "체크 아웃"과 더 유사한 것을 사용할 수 있습니다 .

git checkout-index -f -a --prefix=/some/path/

여기서 -a옵션은 git모든 파일을 체크 아웃하도록 지시 합니다. 접두사가 출력 앞에 추가됩니다. 누군가는 쓴 이 래퍼를 을주고 git export.


2
나는 당신이 필요 이상으로 이것을 어렵게 만들고 있다고 생각합니다. GIT_WORK_TREE=/destinationpath git checkout -f현재 디렉토리가 Bare 저장소 또는 .git 서브 디렉토리의 맨 위에있는 동안 실행 하십시오. / destinationpath에 체크 아웃을합니다
Zoredache

좋아, 나는 당신에게 +1 옵션을 놓쳤다.
slhck

1
솔직히이 옵션을보다 직관적으로 생각합니다. 오류가 적습니다.
Minix
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.