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
운영 중인 폴더입니다.
포함안 포함 안 함build
gitignore로에서.이렇게 하면 모든 분기에 대해 항상 무시됩니다.
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
입니다.production
branch.과 같이 합니다. 그렇게 하기 위해 다음을 수행합니다.
에 다파일있라는 ../.git/config
다음을 - 다음사추합니다야해.
을excludesfile = +info/exclude
아래보다 [core]
[core]
excludesfile = +info/exclude
섹만기들의 에 새 ../.git/config
~하듯이
[branch "production"]
excludesfile = +info/exclude_from_public_viewing
솔루션 2
대안이 . 를 들어, 이 추가하고 합시다. 당신이 추가하고 싶다고 가정해 보겠습니다.build/
에 있습니다.production
다른 모든 분기에서 분기하고 무시합니다.
하세요.gitignore
java.
생산 지점에서, 작업하는 동안git add
add 제추가강build
폴더:git add -f --all build/
저는 그 MP3 파일들을 S3에 넣는 것을 고려하는 것을 강력히 추천합니다.그것들을 당신의 헤로쿠 푸시(그리고 따라서 당신의 헤로쿠 슬러그의 일부)의 일부로 하는 것은 당신의 다이노 시작 시간을 크게 늦출 것입니다.Heroku는 EC2를 사용하기 때문에 파일이 S3에 있고 사용자가 S3에 직접 연결되지 않은 경우에만 액세스할 수 있으면 대역폭 요금을 지불하지 않고 50MB만 저장할 수 있습니다.
.gitignore가 당신의 브랜치에서 달라지도록 시도해 본 적이 있습니까?
파일이 해당 분기에서 추적되지 않는 한 현재 분기를 기준으로 원하는 내용을 무시할 수 있습니다.
요약
- 트래비스 CI를 사용하여 배포(Heroku 배포 지원)
나는 나의 것에 추가합니다.
.travis.yml
:before_deploy: - mv misc/.gitignore .gitignore
에▁where디
misc
폴더가 된 폴더입니다..gitignore
.
Travis CI가 프로젝트를 배포할 때 Travis CI는 제공자 파일 및 폴더를 배포할 때 이를 무시하지 않습니다.misc/.gitignore
).gitignore
출처).
제한 사항
- 이 답변은 작성자의 모든 조건에 적합하지 않을 수 있습니다.그러나 이 답변은 "git를 사용하여 한 분기의 파일을 무시하고 다른 분기에서 커밋하려면 어떻게 해야 합니까?"라는 질문에 답합니다.
- 저는 헤로쿠 사용자가 아닙니다. 저는 헤로쿠를 위한 것이 아니라 깃허브를 위한 예입니다.이 답변의 데이터는 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_TOKEN
with 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
'programing' 카테고리의 다른 글
Wordpress 사용자 지정 게시물 유형에 대한 간단한 사용자 역할 설정 방법 (0) | 2023.07.09 |
---|---|
2차원 어레이 대 1차원 어레이의 성능 (0) | 2023.07.09 |
PL/SQL에서 2차원 배열 생성 또는 시뮬레이션 (0) | 2023.07.04 |
Firebase에서 모든 노드 데이터를 로드하지 않고 노드의 자식 수를 가져올 수 있는 방법이 있습니까? (0) | 2023.07.04 |
C에서 사용 가능한 스택 크기 확인 중 (0) | 2023.07.04 |