programing

Git - 푸시할 수 없음 - "![리모트 거부] 마스터 -> 마스터 (작업 디렉토리에는 스테이징되지 않은 변경이 있음)"

minxs 2023. 3. 7. 22:02
반응형

Git - 푸시할 수 없음 - "![리모트 거부] 마스터 -> 마스터 (작업 디렉토리에는 스테이징되지 않은 변경이 있음)"

로컬 버전, 스테이징 버전, 프로덕션 버전이 있는 Wordpress 설치를 위해 "간단한" git 워크플로우를 설정하려고 합니다.로컬에서 변경하여 로컬에서 스테이징으로, 로컬에서 프로덕션으로 푸시하기만 하면 됩니다.처음에 나는 이것이 간단한 일이 될 것이라고 생각했다.저장소를 초기화하고, "스테이징"과 "프로덕션" 두 개의 리모트를 추가하고, 리모트 상에서 git를 초기화하고, 통상적으로 다음 명령어를 사용하여 로컬 버전에서 스테이징 및 프로덕션 서버로 변경을 푸시할 수 있었습니다.

git add .
git commit -m "some changes"
git push staging master
git push production master

그러나 작업 중 어느 시점에서 뭔가 변경되어 Staging으로 푸시할 수 있는 동안 프로덕션 서버에 푸시할 수 없게 되면 다음 오류가 발생합니다.

! [remote rejected] master -> master (Working directory has unstaged changes)

"git status"를 실행하면 다음과 같이 표시됩니다.

On branch master
nothing to commit, working tree clean

Stack Overflow에 관한 유사하지만 다른 질문에 대한 답변을 읽은 후 다음을 시도했습니다.

git pull staging master
git pull staging master --rebase
git pull production master
git pull production master --rebase

리모트 서버에서도 이 명령어를 실행해 보았습니다.

git config --local receive.denyCurrentBranch updateInstead

Git을 완전히 처음부터 다시 설치하기 위해 이미 여러 번 서버와 저장소를 완전히 재작성했습니다만, 이 문제는 잠시 후에도 계속 발생하고 있으며, 이 시점에서 Git은 실제로 내 워크플로우를 돕는 것이 아니라 해치고 있습니다.제 실수가 뭔지 아시는 분이 계시면 감사하겠습니다!

작업복사파일을 즉시 체크아웃하고 싶은 베어리모트 리포에 푸시하는 것과 같은 문제가 있었습니다.

내 리모콘은 다음과 같이 구성되어 있습니다.receive.denyCurrentBranch updateInstead그러나, 예측 불가능한 시간에 대한 푸시를 여전히 거부했습니다.

Git 2.4는 푸시 투 체크 아웃 훅을 추가했는데, 이러한 푸시 실패는 덮어쓸 수 있습니다.

저는 githooks 문서의 예를 참고하여 짧은 대본을 작성했습니다.

#!/bin/sh
set -ex
git read-tree --reset -u HEAD "$1"

이 스크립트를 에 설치했습니다..git/hooks/push-to-checkout내 리모트 리포트에서.

이 스크립트는 리모트의 작업 복사본을 덮어씁니다.이 스크립트는 이러한 파일의 변경 내용을 병합하지 않습니다.

작업 복사본에 단순히 레포에 파일을 반영하고 싶기 때문입니다.

git bare repo를 만드는 것은 추진하기에 가장 좋은 방법입니다.
나약하지 않은 걸로 밀면...다만, 송신원측에서 파일을 푸시 하는 동안, 행선지측에서 파일을 수정하지 않는 경우에 한정됩니다.Push-to-Deploy를 참조하십시오.

그러나 받은 모든 파일을 실제 폴더에 체크 아웃하기 위해 수신 후 후크를 추가하는 것이 좋습니다.

언급URL : https://stackoverflow.com/questions/48413102/git-cant-push-remote-rejected-master-master-working-directory-has

반응형