programing

git를 사용하여 한 분기의 파일을 무시하고 다른 분기에서 커밋하려면 어떻게 해야 합니까?

css3 2023. 7. 4. 22:06

git를 사용하여 한 분기의 파일을 무시하고 다른 분기에서 커밋하려면 어떻게 해야 합니까?

헤로쿠에 배치할 프로젝트가 있습니다.소스 코드 트리에는 mp3 파일이 많이 포함되어 있습니다(웹사이트는 제가 많이 관여했던 녹음 프로젝트를 위한 것입니다).

나는 그것의 소스 코드를 깃허브에 올리고 싶지만 깃허브는 그들의 무료 계정에 300MB 제한이 있습니다.mp3 파일 묶음에 50MB의 제한 용량을 사용하고 싶지 않습니다.분명히, 나는 그것들을 추가할 수 있습니다..gitignore그들이 내 보고서에 들어가지 못하게 하기 위해 파일을 작성.

합니다. 헤로쿠를 사용합니다.git push heroku됩니다. mp3 파일은 Heroku에 됩니다.

이상적으로, 저는 하고 싶습니다..gitignore로컬 마스터 브랜치에 있는 mp3 파일을 GitHub에 푸시하면 mp3가 포함되지 않습니다.그렇다면 mp3를 무시하는 것보다 커밋하는 현지 생산 지점을 유지하겠습니다.배포하기 위해 마스터를 프로덕션에 병합한 다음 프로덕션 지점을 Heroku에 푸시합니다.

제대로 작동이 안 돼요.

여기 제가 하려는 일의 예가 있습니다.

$ git init git-ignore-test
$ cd git-ignore-test
$ echo "*.ignored" >> .gitignore
$ git add .gitignore && git commit -m "Ignore .ignored files"
$ touch Foo.ignored

이 시점에서 Foo.ignored는 마스터 브랜치에서 무시되지만 Foo.ignored는 여전히 존재하므로 프로젝트에서 사용할 수 있습니다.

$ git checkout -b unignored
$ cat /dev/null > .gitignore
$ git add Foo.ignored .gitignore && git commit -m "Unignore .ignored files"

이제 제가 원하는 대로 이 파일들이 커밋된 지점이 있습니다.하지만 다시 마스터 브랜치로 전환하면 Foo.ignored가 사라집니다.

이 설정에 더 좋은 방법을 제안할 수 있는 사람이 있습니까?

편집: 분명히 말씀드리자면, 제가 사이트를 로컬로 실행할 때(어느 지점을 사용하여) 사이트가 작동할 수 있도록 mp3 파일이 두 지점에 모두 존재하기를 원합니다.나는 GitHub에 푸시할 때 파일도 푸시되지 않도록 파일을 한 분기에서 무시하기를 원합니다.일반적으로 .gitignore는 이러한 종류의 작업(즉, 원격으로 푸시할 때 포함되지 않는 파일의 로컬 복사본 유지)에 적합하지만 파일이 체크인된 상태에서 분기로 전환한 다음 파일이 무시된 상태로 다시 전환하면 파일이 사라집니다.

이 솔루션은 패치가 적용된 특정 Git 버전에서만 작동하는 것으로 나타납니다.작동할 수 있는 버전에 대한 힌트는 해결 방법을 가리키는 답변다른 답변후속 설명을 참조하십시오.

효과적으로 사용하는 방법에 대한 블로그 게시물을 작성했습니다.excludesfile공공 깃허브와 헤로쿠 배치를 위한 것과 같은 다른 지점에 대한 것입니다.

빠르고 더러운 것은 다음과 같습니다.

$ git branch public_viewing
$ cd .git/
$ touch info/exclude_from_public_viewing
$ echo "path/to/secret/file" > info/exclude_from_public_viewing 

그런 다음 .git/config 파일에 다음 행을 추가합니다.

[core]
excludesfile = +info/exclude

  
[branch "public_viewing"]
excludesfile = +info/exclude_from_public_viewing

모든 은 이제모세무시에 .info/exclude 및 은 .info/exclude_from_public_viewing

http://cogniton-mind.tumblr.com/post/1423976659/howto-gitignore-for-different-branches

중요한 힌트:인식에 의해 승인된 답변입니다.마음은 작동하지 않습니다(더 이상, 몇 년 동안 또는 아마도 바닐라 버전의 깃에 대해). 댓글을 참조하십시오.유효한 답변 및 해결 방법은 다음에서 확인할 수 있습니다.

https://stackoverflow.com/a/29583813/2157640

은 (특정 를 해결하기 위해 이나 후크 함) " " " " " " 입니다.git stash -u -a이것은 차이가 클 때 지루합니다.

하여 VM을 입니다.info/excludes분기에 적합하며, 각각 문제가 되는 커밋되지 않은 파일/폴더를 삭제합니다.

우리가 무시하고 싶다고 가정해 보겠습니다.build를 제외한 다른 의 폴더production가 지가를 . 우리가 밀고 싶은 대로.build운영 중인 폴더입니다.

포함안 포함 안 함buildgitignore로에서.이렇게 하면 모든 분기에 대해 항상 무시됩니다.

exclude_from_public_viewing東京의 ./.git/info존재합니다) (" "는") 폴touch ./.git/info/exclude_from_public_viewing

exclude_from_public_viewing줄만 (무시하려고 )build모든 지점에 대해). !build

.git/info/exclude우리는 그 안에 다음 줄을 추가해야 합니다.

 build

우리는 무시하고 싶습니다.build.추가하지 . 무시해야 알 수 요?gitignore라는 이름의 파일입니다. 그렇다면 git는 무엇을 무시해야 하는지 어떻게 알 수 있을까요?정답은 다음에 추가하는 것입니다.exclude을 저장하고 파일을 로 일파및해파일전달당로부에 git config

로 이제우합리무야시니다해로건조부는합니.build입니다.productionbranch.과 같이 합니다. 그렇게 하기 위해 다음을 수행합니다.

에 다파일있라는 ../.git/config다음을 - 다음사추합니다야해.

excludesfile = +info/exclude아래보다 [core]

[core]
     excludesfile = +info/exclude

섹만기들의 에 새 ../.git/config~하듯이

[branch "production"]
    excludesfile = +info/exclude_from_public_viewing

솔루션 2

대안이 . 를 들어, 이 추가하고 합시다. 당신이 추가하고 싶다고 가정해 보겠습니다.build/에 있습니다.production다른 모든 분기에서 분기하고 무시합니다.

하세요.gitignorejava.

생산 지점에서, 작업하는 동안git add add 제추가강build 폴더:git add -f --all build/

저는 그 MP3 파일들을 S3에 넣는 것을 고려하는 것을 강력히 추천합니다.그것들을 당신의 헤로쿠 푸시(그리고 따라서 당신의 헤로쿠 슬러그의 일부)의 일부로 하는 것은 당신의 다이노 시작 시간을 크게 늦출 것입니다.Heroku는 EC2를 사용하기 때문에 파일이 S3에 있고 사용자가 S3에 직접 연결되지 않은 경우에만 액세스할 수 있으면 대역폭 요금을 지불하지 않고 50MB만 저장할 수 있습니다.

.gitignore가 당신의 브랜치에서 달라지도록 시도해 본 적이 있습니까?

파일이 해당 분기에서 추적되지 않는 한 현재 분기를 기준으로 원하는 내용을 무시할 수 있습니다.

요약

  1. 트래비스 CI를 사용하여 배포(Heroku 배포 지원)
  2. 나는 나의 것에 추가합니다..travis.yml:

    before_deploy:
    - mv misc/.gitignore .gitignore
    

    에▁where디misc 폴더가 된 폴더입니다..gitignore.

    mv UNIX 명령 파일 이동, 파일이 이미 있는 경우 덮어씁니다.

Travis CI가 프로젝트를 배포할 때 Travis CI는 제공자 파일 및 폴더를 배포할 때 이를 무시하지 않습니다.misc/.gitignore).gitignore출처).


제한 사항

  1. 이 답변은 작성자의 모든 조건에 적합하지 않을 수 있습니다.그러나 이 답변은 "git를 사용하여 한 분기의 파일을 무시하고 다른 분기에서 커밋하려면 어떻게 해야 합니까?"라는 질문에 답합니다.
  2. 저는 헤로쿠 사용자가 아닙니다. 저는 헤로쿠를 위한 이 아니라 깃허브를 위한 예입니다.이 답변의 데이터는 GitHub에서 작동하지만 Heroku에서는 작동하지 않을 수 있습니다.

관련성

이 답변은 2018년 4월과 관련이 있습니다.미래에는 이 답변의 데이터가 더 이상 사용되지 않을 수 있습니다.


시연

나의 진짜 프로젝트

성공적인 배포의 입니다.

4.1. 과제

src 분기에서 동일한 저장소의 대상 분기로 프로젝트를 배포합니다.

나는 그 파일을 원합니다.PaletteMira.suricate-profile:

  • 로컬 컴퓨터 - 모든 분기에 대해 존재합니다.
  • src 원격 분기 - 존재하지 않습니다.
  • dest 원격 분기 - 존재합니다.

내가 질문의 저자를 올바르게 이해했다면, 그는 비슷한 과제를 가지고 있습니다.

4.2. src

sources 분기 — Sasha YAML.

일부:

before_deploy:
- mv misc/.gitignore .gitignore

deploy:
  provider: pages
  on:
    branch: SashaYAML
  keep-history: true
  skip-cleanup: true
  target-branch: SashaDevelop
  repo: Kristinita/PaletteMira
  github-token: $GITHUB_TOKEN
  committer-from-gh: true
  project-name: PaletteMira
verbose: true

일부:

*.sublime-snippet
*.suricate-profile

misc/.gitignore

*.sublime-snippet

*.suricate-profile에 없는misc/.gitignore.

PaletteMira.suricate-profile이 분기에 원격으로 존재하지 않지만 로컬로 존재합니다.

4.3. 목적지

대상 분기 - 사샤 개발

일부:

*.sublime-snippet

*.suricate-profile에 없는misc/.gitignore.

PaletteMira.suricate-profile분기에 대해 원격 및 로컬로 존재합니다.

4.4 재현 단계

Travis CI에 대해 PaletteMira GitHub 저장소 사용환경 변수 설정 $GITHUB_TOKENwith value — my 깃헙 토큰 → src 브랜치에 대한 모든 커밋을 수행합니다.

오류가 없으면 예상되는 동작을 수행해야 합니다.

헤로쿠에서 커밋하고 밀어줄 수 있습니까?

예를 들어 오디오를 추가하고, github과 herku에 밀어넣고, Herku의 작업 복사본에 있는 파일을 제거합니다.디스크가 아닌 레포에서 오디오를 제거한 다음 변경 내용을 다시 github으로 밀어 넣습니다.

Github은 이제 대용량 파일 스토리지를 지원합니다. 자세한 내용은 여기를 참조하십시오. https://git-lfs.github.com/

원래 질문은 좀 이상하지만, 방금 중간 기사를 썼기 때문에 누군가에게 도움이 될 수도 있다고 생각했습니다.

저는 개인적으로 허스키를 통해 훅으로 이 문제를 해결했습니다. 가장 쉽고 신뢰할 수 있는 해결책인 것 같습니다.

분명히, 저는 기사를 읽을 것을 제안하지만 여기 재현하는 단계가 있습니다.

  • 1단계: yarn add -D husky && yarn husky install
  • 2단계: yarn husky add .husky/post-checkout
  • 3단계: mkdir .husky/gitignores && cp .gitignore .husky/gitignores
  • 4단계: touch .husky/gitignores/.gitignore_husky
  • 5단계:요지 내용을 복사하여 에 붙여넣습니다..husky/post-checkout

언급URL : https://stackoverflow.com/questions/1836742/using-git-how-do-i-ignore-a-file-in-one-branch-but-have-it-committed-in-another