program story

Git에서 로컬 변경 사항이 푸시되지 않도록 방지

inputbox 2020. 11. 28. 09:15
반응형

Git에서 로컬 변경 사항이 푸시되지 않도록 방지


저장소를 복제했고 저장소의 master분기가 추적 중 origin/master입니다. 내가 만든 work지점 및 응용 프로그램 작업을 만들기 위해 내 dev에 컴퓨터에 어떤 설정 파일의 특정을 변경했습니다.

내 일반적인 작업 흐름은 master분기 로 전환하고 분기에서 변경 한 내용 workpush해당 변경 사항을 업스트림 으로 병합 하는 것입니다. 문제는 특정 chnages가 푸시되는 것을 원하지 않는다는 것입니다. work분기를 병합하면 master변경 사항도 병합됩니다.

지금까지 찾은 유일한 해결책은 이러한 변경 사항을 적용 work하지 않는 것이지만 만족스러운 해결책은 아닙니다.


이러한 로컬 구성 파일의 커밋을 방지 (푸시)하려면 git update-index --assume-unchanged를 사용할 수 있습니다 . 이 플래그가 표시된 파일은 변경되지 않는 것으로 간주됩니다 (--no-assume-unchanged로 플래그를 재설정 할 때까지)


파일이 아직 추적되고 있지 않은 경우 로컬 저장소의 .gitignore 파일에 추가 할 수 있습니다. 그렇지 않으면 git update-index --assume-unchangedMauricio가 말한 것처럼 사용해야 합니다.

다음은 .gitignore 파일에 대한 자세한 정보입니다.

http://git-scm.com/docs/gitignore


이를 해결하는 한 가지 방법은 업스트림을 푸시하기 전에 작업 분기에서 마스터로 각 변경 사항을 "체리 선택"하는 것입니다. 로컬 변경에 대해서만 커밋 메시지에 NOCOMMIT와 같은 단어를 포함시킨 다음 다음과 같은 쉘 스크립트를 사용하는 기술을 사용했습니다.

#!/bin/sh

BRANCH=`git branch | grep ^\\* | cut -d' ' -f2`
if [ $BRANCH != "master" ]; then
  echo "$0: Current branch is not master"
  exit 1
fi

git log --pretty=oneline work...master | grep -v -E '(NOCOMMIT|DEBUG):' | cut -d' ' -f1 | tac | xargs -l git cherry-pick

이렇게 하면 NOCOMMIT (또는 DEBUG)로 표시 되지 않은 각 변경 사항이 마스터 분기로 선택됩니다.


필요한 것은 .gitignore 파일이고 .gitignore 파일 안에 모든 구성 파일을 추가하는 것입니다.

.gitignore 파일이 준비되면 캐시에서 구성 파일을 제거해야 할 수 있습니다.

다음은 명령입니다.

(Assume you use linux)
vi .gitignore
//Add all your config file inside

//run the following command to remove your config file from GIT cache if your config files is already track by GIT

git rm --cached myconfig.php

참고 URL : https://stackoverflow.com/questions/2173726/prevent-local-changes-getting-pushed-in-git

반응형