리포지토리 외부의 위치를 ”체크 아웃”할 수 있습니까? 의미하는 것은“.git”디렉토리가없는 분기의 복제입니다.
예를 들어 : git을 사용하여 웹 사이트를 관리하십시오. WebDAV를 통해 일부 파일을 편집하고 파일을 커밋하고 웹 서버에 복사합니다. WebDAV 경로는 리포지토리 외부 위치이며 “.git”을 포함해서는 안됩니다.
이것은 git이 빌드 된 문제는 아니지만 가능합니까?
답변
네, 가능합니다.
/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 호스트에 직접 또는 임시 위치로 체크 아웃 할 커밋 후 후크를 작성할 수 있어야합니다. 그러면 업로드를 스크립팅 할 수 있습니다.
답변
파일 만 원하면을 사용할 수 있습니다 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
.