programing

Git - 병합하는 동안 파일 무시

megabox 2023. 7. 3. 22:38
반응형

Git - 병합하는 동안 파일 무시

라고 불리는 레포가 있습니다.myrepo 원으격로 있는▁on▁the.beanstalk서버.

저는 그것을 제 지역 컴퓨터에 복제했습니다.을 추가로 .staging그리고.dev이 분기도 원격으로 푸시했습니다.

이제:

 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작동하지 않습니다.다른 선택지는 무엇입니까?무시된 파일은 체크아웃 및 커밋의 일부여야 하며, 이는 중요합니다.병합 중에만 무시해야 합니다.

감사합니다!

merge 를 git merge와 으로써 이 문제를 했습니다.--no-commit옵션을 선택한 다음 준비된 파일을 명시적으로 제거하고 파일의 변경 내용을 무시합니다.예: 변경 내용을 무시합니다.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 루프에 넣을 수 있습니다.

나는 결국 깃을 찾았습니다.attributes일하고 .지금까지 일하고 있습니다.일부 시나리오를 아직 확인하지 않았습니다.하지만 그것이 해결책이 되어야 합니다.

병합 전략 - Git 특성

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

특정 파일에 대해 다른 병합 전략을 사용하도록 Git에 알리는 속성을 지정할 수 있습니다.여기서, 우리는 기존의 것을 보존하고 싶습니다.config.xml우리 지점을 위하여.우리는 설정해야 합니다.merge=fooconfig.xml.gitattributesjava.

merge=foo병합 충돌이 발생할 경우 Git에게 당사의 (현재 분기) 파일을 사용하도록 지시합니다.

  1. 추가.gitattributes 파일입니다.

  2. confix.xml 파일에서 할 수 ..gitattributes

     <pattern> merge=foo
    

    의 예를 들어 보겠습니다.config.xml

     config.xml merge=foo
    
  3. 그런 다음 더미를 정의합니다.foo전략과 병합:

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

stag태형을 dev와 병충돌대신합대와 합니다.config.xml브랜치의 가지고 있던 버전을

추가 참조: merge_strategies

예:

  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

▁by를 사용하는 것으로 할 수 .git merge --no-commit그런 다음 원하는 대로 병합을 편집합니다. 즉, 스테이징을 해제합니다.config.xml또는 다른 파일을 지정한 다음 커밋합니다.그 후 후크를 사용하여 더 자동화하고 싶으실 것 같지만, 한 번쯤은 수동으로 처리해 볼 가치가 있을 것 같습니다.

많은 사람들이 언급했듯이 수락된 답변과 해당 답변의 복사본(특정 파일 또는 파일에 대한 사용자 지정 병합 전략 사용)은 실제 병합 충돌이 발생할 경우에만 작동합니다.

병합 충돌이 발생하지 않아 병합을 커밋하는 2가지 단순 사례:

  • 당신은 있습니다.config.xml마스터가 아닌 피쳐 분기에 있는 파일입니다.할 때 입니다.
  • 당신의.config.xml두 분기의 파일은 동일한 커밋을 기반으로 합니다.기능의 파일에 새 코드가 추가됩니다.

중 하 나 사 용을 사용합니다.merge --no-commitunmesh-gurjar 또는 단순히 개개의 커밋을 마스터로 체리픽(cherry pick invidual)하는 것으로 입증되었습니다.후자는 물론 다소 번거롭고 몇 가지 다른 함정(새로운 SHA1 ID 등)과 함께 제공됩니다.

사용할 수 있습니다..gitignoreconfig.xml저장소에서 나온 다음 사후 커밋 후크를 사용하여 해당 파일을 업로드합니다.config.xml파일을 서버에 저장합니다.

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

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

예:-

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

깃 후크 사용을 고려합니다.

Git Checkout을 성공적으로 실행한 후 체크아웃 후 후크가 실행됩니다. 이 후크를 사용하여 프로젝트 환경에 적합한 작업 디렉터리를 설정할 수 있습니다.이는 소스 제어, 자동 생성 설명서 등을 사용하지 않는 큰 이진 파일로 이동하는 것을 의미할 수 있습니다.

출처: https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks #:~:text=%20 이후에 %20 행을 따라 %20을 실행합니다.

필요한 경우 저장소에서 제외하도록 선택할 수 있는 별도의 디렉토리에 이러한 파일을 저장할 수 있습니다..gitignore.

으로 "" " " " "의 입니다.post-checkout그러면 후크는 해당 분기에 대한 올바른 파일(하위 디렉터리에 있을 수 있음)을 가져와 올바른 위치에 복사(덮어쓰기)할 수 있습니다. 개별 파일은 개파다음있에합어다야니은다에 ..gitignore.

post-checkout대본을 작성하다..git/hooks:

#!/bin/sh

BRANCH=`git reflog | awk 'NR==1{ print $8; exit }'`

cp "./configs/$BRANCH/config.json" "./config.json"

exit 0

언급URL : https://stackoverflow.com/questions/15232000/git-ignore-files-during-merge

반응형