GIT_WORK_TREE는 무엇입니까?이 ENV 변수를 설정할 필요가없는 이유는 무엇입니까?
내 프로젝트를 동기화하고 배포하기 위해 Ubuntu Linux에서 Git을 사용하고 있습니다.
로컬 Linux 작업 시스템에 Repo가 있고 서버에 두 개의 저장소가 있습니다. 하나는 베어 저장소이고 다른 하나는 배포 된 앱입니다.
항상 잘 작동했지만 이제 다른 웹 사이트에 대한 또 다른 저장소를 만들었고 이제 다음 오류가 발생합니다.
root@vserver5:/var/www/ninethsky# git pull origin master
fatal: /usr/lib/git-core/git-pull cannot be used without a working tree.
그래서 나는 GIT_WORKING_TREE ENV-Var를 설정해야합니다. 그러나 이것은 정확히 무엇이며 어디에 설정해야합니까?
이것은 내 저장소의 .git / config입니다.
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = /home/git/ninethsky/.git
fetch = +refs/heads/*:refs/remotes/origin/*
bare = true내 로컬 작업 시스템에 다른 repo와 repo가 있습니다 .
그런 다음 모든 저장소를 제거했지만 초기 저장소는 이제 다음과 같습니다.
root@vserver5:/var/www/ninethsky# git init
fatal: GIT_WORK_TREE (or --work-tree=<directory>) not allowed without specifying GIT_DIR (or --git-dir=<directory>)
root@vserver5:/var/www/ninethsky# git init --git-dir=/var/www/ninethsky
error: unknown option `git-dir=/var/www/ninethsky'
git init공백으로 설정된 GIT_WORK_TREE를 설정 해제 하여 문제를 해결했습니다 . GIT_WORK_TREE 및 GIT_DIR이 설정되지 않았습니다. git init다시 작동하지만 git add .베어로 설정된 복제 된 저장소의 git 작업과 관련 하여 여전히 문제가 있습니다.
고마워, Joern.
베어가 아닌 git 저장소가있는 경우 git 디렉토리와 작업 트리의 두 부분이 있습니다. 작업 트리에는 변경 사항이있는 체크 아웃 된 소스 코드가 있습니다. git 디렉토리는 일반적으로라고 .git하며 작업 트리의 최상위 수준에 있습니다. 여기에는 프로젝트의 모든 기록, 구성 설정, 분기에 대한 포인터, 색인 (스테이징 영역) 등이 포함됩니다. git 디렉토리는 다음과 같은 파일과 디렉토리를 포함하는 디렉토리입니다.
branches description HEAD index logs ORIG_HEAD refs
config FETCH_HEAD hooks info objects packed-refs
위에서 설명한 것은 git 저장소의 기본 레이아웃이지만 실제로 파일 시스템의 모든 디렉토리를 git 디렉토리 및 작업 트리로 설정할 수 있습니다 . --work-tree및 --git-dir옵션을 git사용하거나 GIT_DIR및 GIT_WORK_TREE환경 변수를 사용하여 이러한 디렉토리를 기본값에서 변경할 수 있습니다 . 그러나 일반적으로이를 설정할 필요가 없습니다.
표시되는 오류는 첫 번째 검사 중 하나에서 발생합니다 git pull. 작업 트리에서 실행되어야합니다. 이것은 GIT_DIR또는 GIT_WORK_TREE환경 변수 를 설정했기 때문이라고 가정 합니다. 그렇지 않으면 .git디렉토리에 액세스 할 수 없거나 어떤 식 으로든 손상 될 수 있습니다. 의 내용을 나열하면 /var/www/ninethsky/.git위에서 인용 한 목록과 비슷합니까? 명령을 실행하는 사용자가 이러한 모든 파일 및 디렉토리를 읽고 쓸 수 있습니까? 아니면 권한이 변경되었을 수 있습니까?
업데이트 : 추가 정보의 요점에 대한 답변으로 질문을 업데이트했습니다.
git init아마도GIT_WORK_TREE환경 변수가 설정되어 있기 때문에 실패 할 수 있으며 오류 메시지에서 알 수 있듯이 작업 트리를 지정하는 경우 git 디렉터리도 지정해야합니다.- 두 번째 변형 (
git init --git-dir=/var/www/ninethsky)--git-dir은init.
그러나이 상황에서, 당신은 전혀 작업 트리를 지정할 필요가 없습니다 일을 내가 당신이 있는지 확인 할 수 있도록 설정 해제GIT_WORK_TREE 및 GIT_DIR환경 변수.
1 즉, 실수로 웹에 액세스 할 수 있도록 권한을 설정 한 경우 .git디렉토리 를 유지하는 것은 좋지 않은 생각으로 간주 될 수 있으므로 /var/wwwgit 디렉토리를 다른 곳에 보관하려는 경우 일 수 있습니다. 옵션은 이미 혼란을 야기하고 있습니다. 아마도 git 부분을 단순하게 유지하고 .git다른 방법으로 디렉토리에 대한 액세스를 거부 하는 것이 좋습니다.
아마도 git 부분을 단순하게 유지하고 다른 방법으로 .git 디렉토리에 대한 액세스를 거부하는 것이 좋습니다.
.htaccess를 사용하여 .git 디렉토리에 대한 공개 액세스를 거부 할 수 있습니다.
git 하위 모듈의 경로 (작업 트리) 이름을 변경 한 경우에도이 오류가 발생할 수 있습니다. 제 경우에는 .gitmodules새로운 경로와 일치 하도록 경로를 업데이트했으며 내가 좋다고 생각했습니다. 그러나 git pull나중에 할 때 이전 경로에 새 파일을 추가했습니다. 이는 모듈 경로가 정의 된 두 곳이 있기 때문입니다. .git/modules/{modulename}/config파일에 정의 된대로 "작업 트리"도 업데이트해야 합니다.
'IT TIP' 카테고리의 다른 글
| Django를 다른 get 변수로 페이지 매김하는 방법은 무엇입니까? (0) | 2020.11.20 |
|---|---|
| git bash Windows 바로 가기를 수정할 수 없습니다. (0) | 2020.11.20 |
| 파이썬 JSON은 첫 번째 수준에서만 키를 얻습니다. (0) | 2020.11.20 |
| LINQPad는 다른 클래스 (예 : LINQ in Action 샘플의 Books)를 어떻게 참조합니까? (0) | 2020.11.20 |
| Visual Studio : 프로세스가 생성 될 때 프로세스에 자동 연결 (0) | 2020.11.20 |