Git-병합 중 파일 무시 로컬 컴퓨터에 복제했습니다. 두

myrepo원격 beanstalk서버 에서 리포지토리가 호출 되었습니다 .

내 로컬 컴퓨터에 복제했습니다. 두 개의 추가 분기 : stagingdev. 이 지점도 원격지로 밀었습니다.

지금:

 local                   remote                   server
 --------------------------------------------------------
 master  ==> Pushes to  `master`  ==> deployed to `prod`
 staging ==> Pushes to  `staging` ==> deployed to `staging`
 dev     ==> Pushes to  `dev`     ==> deployed to `dev`

config.xml각 분기마다 다른 파일 이 있습니다.

병합 중에 만이 파일을 무시하고 싶습니다. 하지만 repo 브랜치에서 체크 아웃하거나 커밋 할 때 이것이 포함되기를 원합니다.

내가 원하는 이유는 특정 브랜치를 가져와 (체크 아웃) 각 서버에 배포하는 배포 스크립트가 있기 때문입니다. 따라서 config.xml배포시 위에 표시된대로 특정 분기의 파일이 특정 서버로 이동 해야 합니다.

.gitignore작동하지 않을 것 같아요 . 다른 옵션은 무엇입니까? 무시 된 파일은 체크 아웃 및 커밋의 일부 여야하며 이는 중요합니다. 병합 중에 만 무시해야합니다.

감사!



답변

--no-commit옵션과 함께 git merge 명령을 사용하여이 문제를 해결 한 다음 준비된 파일을 명시 적으로 제거하고 파일의 변경 사항을 무시합니다. 예 : myfile.txt다음과 같이 진행 하려면 변경 사항을 무시하고 싶습니다 .

git merge --no-ff --no-commit <merge-branch>
git reset HEAD myfile.txt
git checkout -- myfile.txt
git commit -m "merged <merge-branch>"

건너 뛸 파일 목록이있는 경우 문 2 및 3을 for 루프에 넣을 수 있습니다.


답변

결국 git을 찾았습니다 attributes. 그것을 시도. 지금까지 일하고 있습니다. 아직 모든 시나리오를 확인하지 않았습니다. 그러나 그것이 해결책이어야합니다.

병합 전략-Git 속성


답변

.gitattributes -하위 디렉토리 또는 파일 하위 집합에 대한 속성을 정의하는 저장소의 루트 수준 파일입니다.

특정 파일에 대해 다른 병합 전략을 사용하도록 Git에 알리는 속성을 지정할 수 있습니다. 여기서는 config.xml브랜치를 위해 기존을 보존하고 싶습니다 . 우리는 설정할 필요 merge=oursconfig.xml에서 .gitattributes파일.

merge=ours 병합 충돌이 발생하면 git에게 우리 (현재 분기) 파일을 사용하도록 지시하십시오.

  1. .gitattributes저장소의 루트 수준에 파일 추가

  2. .gitattributes파일 에서 confix.xml에 대한 속성을 설정할 수 있습니다.

    config.xml merge=ours
    
  3. 그런 다음 다음을 사용하여 더미 우리의 병합 전략을 정의하십시오.

    $ git config --global merge.ours.driver true
    

stag양식 dev브랜치 를 병합하면 병합 이 config.xml 파일과 충돌하는 대신 stag 브랜치의 config.xml이 원래 있던 버전으로 유지됩니다.


답변

를 사용하여 git merge --no-commit시작한 다음 원하는 방식으로 병합을 편집 할 수 있습니다. 즉, 준비 해제 config.xml또는 다른 파일을 사용한 다음 커밋합니다. 후크를 사용하여 추가로 자동화하고 싶겠지 만 적어도 한 번은 수동으로 진행할 가치가 있다고 생각합니다.


답변

를 사용 하여 저장소 외부에 .gitignore보관 config.xml한 다음 커밋 후 후크 를 사용 하여 적절한 config.xml파일을 서버 에 업로드 할 수 있습니다 .


답변

예:

  1. 두 개의 분기가 있습니다. master ,develop
  2. develop브랜치에 파일을 생성 했으며 병합하는 동안 무시하고 싶습니다.

암호:

git config --global merge.ours.driver true
git checkout master
echo "path/file_to_ignore merge=ours" >> .gitattributes
git merge develop

동일한 확장자를 가진 파일을 무시할 수도 있습니다.

예를 들어 .txt확장자가있는 모든 파일 :

echo "*.txt merge=ours" >> .gitattributes


답변

여기 git-update-index-작업 트리의 파일 내용을 색인에 등록합니다.

git update-index --assume-unchanged <PATH_OF_THE_FILE>

예:-

git update-index --assume-unchanged somelocation/pom.xml