Git에서 파일 추적을 중지하고 변경 내용을 무시하는 방법은 무엇입니까?
는 몇 가지 했다..csproj
필요 은 필요 .csproj
Git에 의해 추적되고 있는 파일(또는 패치를 작성할 때 표시되는 파일)이지만, 프로젝트에 필요한 것은 분명합니다.
가가 i i i i i를 했습니다.*.csproj
★★★★★★★★★★★★★에.gitignore
회답하다
status를 하면 git status에 대한 됩니다.csproj
추적이나 패치 제출에는 관심이 없습니다.
이러한 파일의 「추적」을 개인 리포에서 삭제(사용할 수 있도록 소스에 보관)하고, 스테이터스(또는 패치 작성)시에 변경을 표시하지 않게 하려면 어떻게 해야 합니까?
이 상황에 대처할 수 있는 올바른/규범적인 방법이 있습니까?
전화하는 git rm --cached
리비전 제어에서 삭제할 각 파일의 경우 문제가 없습니다.로컬 무시 패턴이 올바른 한 git 상태 출력에 이러한 파일이 포함되지 않습니다.
이 솔루션에서는 저장소에서 파일이 삭제되므로 모든 개발자는 자신의 로컬(리비전 제어되지 않음) 파일 복사본을 유지해야 합니다.
git가 이러한 파일의 변경을 검출하지 않도록 하려면 , 다음의 명령도 사용할 필요가 있습니다.
git update-index --assume-unchanged [path]
하고 싶은 일: (아래 @Ryan Taylor 답변부터)
- 이것은 파일이나 폴더의 독립된 버전을 원하는 것을 git에게 알리기 위한 것입니다.예를 들어 프로덕션/스테이지 구성 파일을 덮어쓰거나 삭제하지 않을 수 있습니다.
git update-index --skip-worktree <path-name>
자세한 답변은 다음 URL에 있습니다.http://source.kohlerville.com/2009/02/untrack-files-in-git/
3가지 옵션이 있습니다.아마도 3번이 필요하실 겁니다
그러면 로컬 파일은 유지되지만 다른 사용자가 파일을 가져올 때 삭제됩니다.
git rm --cached <file-name>
★★★★★★★★★★★★★★★★★」git rm -r --cached <folder-name>
이는 SDK와 같이 변경되지 않는 다수의 파일이 있는 폴더와 같은 최적화를 위한 것입니다.이것은 Git에게 변경사항이 없는지 매번 로컬에서 체크하는 것을 멈추라고 말한다.
assume-unchanged
파일/폴더를 업스트림으로 변경하면 인덱스가 리셋되고 파일이 덮어쓰게 됩니다.git update-index --assume-unchanged <path-name>
이것은 Git에게 당신이 파일이나 폴더의 독립된 버전을 원한다고 말하기 위한 것입니다.예를 들어 프로덕션/스테이지 구성 파일을 덮어쓰거나 삭제하지 않을 수 있습니다.
git update-index --skip-worktree <path-name>
이 사실을 한다는 것입니다.
git update-index
Git에서는 전파되지 않기 때문에 각 사용자는 개별적으로 실행해야 합니다.
#2 또는 #3 중 하나를 원래대로 되돌리려면[no-]
각 의 배리언트:
git update-index --no-assume-unchanged <path-name>
git update-index --no-skip-worktree <path-name>
하면.git update-index --assume-unchanged file.csproj
file에 의해, 변경시에 것을 수 gitfile.스쿠로즈이것에 의해, 변경시에 git 상태가 되는 것을 막을 수 있습니다.따라서 을 이 수 이 .csproj에 ).다만 업스트림 repo에서 전송되는 새로운 파일은 수동으로 마킹해야 합니다.(이 파일이 에 있는 경우).gitignore
★★★★★★★★★★★★★★★★★」.git/info/exclude
을 참조해 주십시오.)
.csproj 파일이 뭔지 잘 모르겠는데...IDE 구성(Eclipse의 .eclipse 및 .classpath 파일과 유사)과 같은 것이라면 소스 제어는 전혀 하지 않는 것이 좋습니다.한편, 빌드 시스템(Makefiles 등)의 일부인 경우, 빌드 업을 글로벌 부품과 로컬 오버라이드로 분할하는 등, 옵션의 로컬 변경을 취득하는 방법이 편리합니다.
이것은 2단계 프로세스입니다.
파일/폴더 추적을 제거하되 디스크에 보관 - 다음을 사용하여
git rm --cached
현재는 "변경"으로 표시되지 않지만 여전히 "변경"으로 표시됩니다.
untracked files in git status -u
여기에다가 더하면 됩니다.
.gitignore
받아들여진 답변은 여전히 나에게 효과가 없었다.
나는 사용했다
git rm - r --syslog.
git add를 클릭합니다.
git - m "commit . signore" 를 커밋합니다.
여기서 답을 찾았습니다.
.gitignore를 잊으셨나요?
프로젝트 전체를 로컬로 가지고 있는데 추가하는 것을 잊은 경우 ignore를 실행하고 불필요한 파일을 추적하고 있는 경우 이 명령을 사용하여 모든 파일을 삭제합니다.
git rm --cached -r .
프로젝트의 핵심이 되고 있는지 확인합니다.
그럼 평소대로 하면 되겠네
더하다
git add .
저지르다
git commit -m 'removed all and added with git ignore'
밀다
git push origin master
결론
의 변화를 하는 이 되기를 ..gitignore
아니면 다 까먹었거나
- 캐시 전체를 삭제합니다.
- 당신의 .gitignore를 보세요.
- 추적할 파일을 추가합니다.
- 레포에 푸시
git으로 파일 또는 경로를 모니터링하지 않으려면 다음과 같이 하십시오.
git update-index --assume-unchanged [file-path]
그리고 다시 사용하기 위해
git update-index --no-assume-unchanged [file-path]
유사한 사용 사례에 대한 레포 https://github.com/awslabs/git-secrets
다른 답변에서도 지적했듯이 선택된 답변은 잘못된 답변입니다.
다른 질문에 대한 답변은 필요한 것은 워크트리의 건너뛰기일 수 있음을 시사합니다.
git update-index --skip-worktree <file>
이 답변은 기사(http://fallengamer.livejournal.com/93321.html)에 링크되어 다음과 같이 --syslog-worktree와 --syslog-worktree의 차이를 요약한 기사를 인용합니다.
--developer가 파일을 변경하지 않는 것을 전제로 하고 있습니다.이 플래그는 SDK와 같이 변경되지 않는 폴더의 성능을 향상시키기 위한 것입니다.
--developer가 특정 파일을 변경하지 않도록 git에 지시할 때 유용합니다.예를 들어 메인 저장소 업스트림에서 일부 운영 가능한 구성 파일을 호스트하고 이러한 파일에 대한 변경을 실수로 커밋하지 않으려면 --skip-worktree를 사용하는 것이 좋습니다.
그들의 연구와 답변은 모두 borealid 덕분이다.여기에 이 정보를 포함시키는 것은 순전히 다른 사람들의 편의를 위해서입니다.
시간을 절약하기 위해 .gitignore에 추가한 규칙을 사용하여 여러 파일/폴더를 삭제할 수 있습니다.
git rm --cached app/**/*.xml
또는
git rm --cached -r app/widgets/yourfolder/
E.T.C.
합니다.git update-index --assume-unchanged
확실히, 이것은 좋은 해결책일지도 모르지만, 단기적으로만 가능합니다.
싶은 일은 이런입니다.git update-index --skip-worktree
.
세방법은 않을 git rm --cached
된 것으로 로컬 파일은 유지되지만 원격 저장소에서 제거된 것으로 표시됩니다.)
처음 두 옵션의 차이점?
assume-unchanged
임시로 파일에서 수정 내용을 숨길 수 있습니다.한 후 브랜치를 아웃하려면 , 「파일 변경」을 .no-assume-unchanged
아마 수정을 했을 겁니다.skip-worktree
체크 아웃 하는 브랜치가 무엇이든, 수정한 브랜치를 팔로우 합니다.
★★★의 예assume-unchanged
파일에서는 이 것을 로 하고 있습니다.또, 이 파일을 변경하면, 됩니다.git status
그러나 다른 지점에 체크아웃할 때는 플래그를 리셋하고 변경을 커밋 또는 저장해야 합니다.이 옵션을 활성화한 상태에서 풀링하면 충돌을 해결해야 하며 git은 자동으로 병합되지 않습니다. 있습니다.git status
플래그가 있는 파일은 표시되지 않습니다).
의 파일을 것을 .git commit -a
)는 동일한 수정과 관련되어 있습니다.
★★★의 예skip-worktree
친구가 설정에 따라 변경해야 하는 매개변수(예: 암호 포함)를 포함하는 설정 클래스가 있습니다.
- 1: 이 클래스의 첫 번째 버전을 만들고 입력할 수 있는 필드를 채우고 다른 클래스는 비워두거나 null로 둡니다.
- 2: 커밋하여 리모트서버에 푸시합니다.
- 3:
git update-index --skip-worktree MySetupClass.java
- 4: 자체 파라미터를 사용하여 구성 클래스를 업데이트합니다.
- 5: 다른 기능에 대한 작업으로 돌아갑니다.
수정은 브랜치에 관계없이 이루어집니다.경고: 친구들도 이 클래스를 수정하려면 동일한 설정을 사용해야 합니다. 그렇지 않으면 원격 저장소로 수정 내용이 푸시됩니다.꺼낼 때 파일의 원격 버전이 파일을 덮어씁니다.
추신: 둘 다 하지 마세요.부작용이 좋지 않거든요.다른 플래그를 시도하려면 먼저 플래그를 비활성화해야 합니다.
Git에게 로컬 파일/폴더에 대한 변경 내용을 추적하지 않도록 하려면(Git 상태가 변경 내용을 감지하지 않음) 다음을 수행합니다.
git update-index --skip-worktree path/to/file
또한 Git에 로컬 버전에 대한 변경 내용을 다시 추적하도록 지시하려면(변경 내용을 커밋할 수 있도록) 다음을 수행합니다.
git update-index --no-skip-worktree path/to/file
현재/미래에 .gitignore 적용
이 메서드는 표준 .gitignore 동작을 적용하므로 무시해야 하는 파일을 수동으로 지정할 필요가 없습니다.
할 수
--exclude-from=.gitignore
: / : / - 갱음하다일반적인 조언: 깨끗한 보고서부터 시작하여 커밋된 모든 내용, 작업 디렉토리 또는 인덱스에 보류 중인 내용 없음, 백업을 만듭니다.
#commit up-to-date .gitignore (if not already existing)
#this command must be run on each branch
git add .gitignore
git commit -m "Create .gitignore"
#apply standard git ignore behavior only to current index, not working directory (--cached)
#if this command returns nothing, ensure /.git/info/exclude AND/OR .gitignore exist
#this command must be run on each branch
git ls-files -z --ignored --exclude-standard | xargs -0 git rm --cached
#optionally add anything to the index that was previously ignored but now shouldn't be:
git add *
#commit again
#optionally use the --amend flag to merge this commit with the previous one instead of creating 2 commits.
git commit -m "re-applied modified .gitignore"
#other devs who pull after this commit is pushed will see the newly-.gitignored files DELETED
지점의 커밋 기록에서 새로 무시된 파일도 삭제해야 하거나 새로 무시된 파일을 나중에 꺼낼 때 삭제하지 않으려면 다음 답변을 참조하십시오.
의 회답 " " " 」git update-index --assume-unchanged [path]
repo" "repo" "repo" "repo" "repo" "repo" "repo" "repo" "repo" "repo" "repo" "repo" " repo" "" 에서 .이 파일을 변경해야 하지만 중앙 보고서로 스테이징/삭제해서는 안 됩니다...gitignore
시스템관리자에의해파일내새로운변경이있을경우시니어개발자는모든로컬저장소에배포되어야합니다.
가장 좋은 예: DB 연결을 위한 구성 파일입니다.중앙 보고서에는 운영 DB 서버의 값을 가진 모든 사용자 이름, 암호, 호스트, 포트가 포함됩니다.그러나 로컬 개발에서는 로컬 또는 다른 개발 DB 서버(팀이 설정한)만 사용해야 합니다.이 경우 컨피규레이션파일을 변경할 필요가 있지만 중앙 리포에 커밋해서는 안 됩니다.
최량
git rm --fileName
git ls-files
또는 해제되었는지 합니다.
git commit -m "UntrackChanges"
git push
각 파일을 개별적으로 선택하는 것이 아니라 특정 폴더 또는 bin 폴더에 있는 모든 파일을 삭제하는 방법을 묻는 것이라고 생각합니다.
을 사용하다
git rm -r -f /<floder-name>\*
그 디렉토리의 부모 디렉토리에 있는 것을 확인합니다.
이 명령은 bin/ 또는 build/ 폴더에 있는 모든 파일을 반복적으로 "삭제"합니다."그그 것을 합니다. "delete"는 "delete"라는 의미입니다.은 이 합니다.git은 삭제 모드로 되어 .
다음 커밋에 대비하여 .gitignore가 준비되어 있는지 확인하십시오.
git rm(: git rm)
git 태킹에서 하나의 파일을 삭제하려고 하는 것 같습니다.그 때문에, 이하의 명령어를 추천합니다.
git update-index --syslog-interface
예: git update-index --assume-unchanged .gitignore .idea / compiler.xml
디렉토리내의 모든 파일(특정 타입의 파일)의 변경을 무시하기 위해서, 이러한 몇개의 어프로치를 조합할 필요가 있었습니다.그렇지 않으면, 파일이 이전에 존재하지 않았던 경우는 작성되었습니다.
아래 항목에서 "excludedir"는 변경 내용을 보고 싶지 않은 디렉토리의 이름입니다.
먼저 기존 새 파일을 파일 시스템에서 제거하지 않고 변경 추적 캐시에서 제거합니다.
git status | grep "new file:" | cut --complement -d " " -f1-4 | grep "^excludedir" | xargs git rm --cache
할 수 있어요.modified:
renamed:
합니다. 이 입니다. 게시물을 봐야 하기 때문입니다.->
및 프리 을 실행합니다.->
「」에 되어 있는 .deleted:
discloss.d.
deleted:
에 존재하지 않는 수 더합니다.
echo .deletedfiles >> .gitignore
git status | grep "deleted:" | cut --complement -d " " -f1-4 | grep "^excludedir" > .deletedfiles
cat .deletedfiles | xargs -d '\n' touch
cat .deletedfiles | xargs -d '\n' git add -f
cat .deletedfiles | xargs -d '\n' git update-index --assume-unchanged
cat .deletedfiles | xargs -d '\n' rm
위의 목록의 마지막 명령을 실행하면 파일 시스템에서 파일이 다시 삭제되므로 생략해도 됩니다.
그런 다음 해당 디렉토리에서 변경 추적을 차단합니다.
git ls-files excludedir/ | xargs git update-index --skip-worktree
git update index --skip-worktree excludedir/
이 답변에서는 거의 git 명령어를 사용하지 않는 접근방식이 제공되었습니다.
모든 로컬 repo에 대해 특정 파일을 무시하려면
- " " " 를 만듭니다.
~/.gitignore_global
:touch ~/.gitignore_global
를 참조해 주세요. - 실행합니다.
git config --global core.excludesfile ~/.gitignore_global
one. one. - 를 "/dir " 에 씁니다.
~/.gitignore_global
.timeoutmodules/*.H
작업 디렉토리)에$WORK_DIR/modules/*.H
.
단일 로컬 리포에 대해 특정 파일을 무시하려면:
- 의 세 는 파일 에 대해 수행합니다.
.git/info/exclude
할 파일를 repo에 ..git/info/exclude
.timeoutmodules/*.C
작업 디렉토리)에$WORK_DIR/modules/*.C
.
동작 순서에 따라 문제가 발생할 수 있습니다.먼저 .gitignore를 수정한 후 git rm --cached xxx를 수정하면 이 문제가 계속 발생할 수 있습니다.
올바른 솔루션:
- git rm --syslog xxx
- .signore를 변경했다.
순서 불변!
수정 후 .gitignore 새로고침!
시간한 후 이 작업을 a in, 에일리어스 a git 명령어 in, 에일리어스 a git.gitconfig
project' file을 use Android studio는 Android studio를 사용합니다.sed
이치노 checkoutandmodifylocalproperties = !git update-index --no-skip-worktree local.properties && git checkout local.properties && git checkout $1 && git update-index --skip-worktree local.properties && sed -i '' 's/.*sdk.dir.*/sdk.dir=\\/Users\\/run\\/Library\\/Android\\/sdk/g' local.properties && :
언급URL : https://stackoverflow.com/questions/936249/how-to-stop-tracking-and-ignore-changes-to-a-file-in-git
'programing' 카테고리의 다른 글
Swift에서 UTC 시간대(ISO 8601, RFC 3339)의 소수 초로 포맷된 날짜 타임스탬프를 해석/작성하려면 어떻게 해야 합니까? (0) | 2023.04.22 |
---|---|
Windows에서 임시 디렉토리를 작성하시겠습니까? (0) | 2023.04.22 |
python의 기존 워크북에 새 시트 추가 (0) | 2023.04.22 |
WPF ListView 열에 항목 추가 (0) | 2023.04.22 |
파일을 재귀적으로 삭제하다 (0) | 2023.04.22 |