programing

업데이트 색인 실행 취소 --작업 트리 건너뛰기

javamemo 2023. 6. 29. 19:40
반응형

업데이트 색인 실행 취소 --작업 트리 건너뛰기

얼마 전 git에 의해 추적된 파일의 변경 사항을 무시하기 위해 이 작업을 수행했습니다.

git update-index --skip-worktree <file>

이제 해당 파일의 변경 내용을 소스에 커밋합니다.의 영향을 취소하려면 어떻게 해야 합니까?skip-worktree?

아하! 난 그냥...

git update-index --no-skip-worktree <file>

http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html, 에 따르면 사용

git ls-files -v

특수 문자로 표시된 "변경되지 않음" 및 "변경되지 않음" 작업 트리 파일을 확인합니다."작업 건너뛰기 트리" 파일은 다음과 같이 표시됩니다.S.

편집: @amcleod가 언급했듯이 모든 숨겨진 파일을 나열하는 별칭을 만드는 것은 기억할 필요가 없도록 하는 좋은 방법입니다.사용합니다alias hidden="git ls-files -v | grep '^S'"내 .vmdk_profile에서.잘 작동합니다!

작업 트리 건너뛰기가 적용된 모든 파일을 실행 취소하려면 다음 명령을 사용할 수 있습니다.

git ls-files -v | grep -i ^S | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree
  1. git ls-files -v모든 파일을 상태와 함께 인쇄합니다.
  2. grep -i ^S파일을 필터링하고 작업 트리만 건너뛰기(S) 또는 작업 트리만 건너뛰기를 선택하고 변경되지 않은 것으로 가정합니다. -i는 대소문자를 구분하지 않음을 의미합니다.
  3. cut -c 3-상태를 제거하고 경로만 남겨 세 번째 문자에서 끝까지 자릅니다.
  4. tr '\012' '\000'줄의 끝 문자(\012)를 0 문자(\000)로 바꿉니다.
  5. xargs -0 git update-index --no-skip-worktree0 문자로 구분된 모든 경로를 에 전달합니다.git update-index --no-skip-worktree되돌리기 위해

Bash 별칭을 사랑하는 여러분 모두를 위해, 여기 모든 별칭을 지배하는 저의 세트가 있습니다(C0DEF52 기반).

alias gitskip='git update-index --skip-worktree ' #path to file(s)
alias gitlistskiped='git ls-files -v | grep ^S'
alias gitunskip='git update-index --no-skip-worktree ' #path to file(s)
alias gitunskipall='git ls-files -v | grep -i ^S | cut -c 3- | tr ''\\012'' ''\\000'' | xargs -0 git update-index --no-skip-worktree'

@GuidC0DE 답변을 기반으로 Powershell 버전이 있습니다(나는 posh-git을 사용합니다).

git update-index --no-skip-worktree $(git ls-files -v | sls -pattern "^S"| %{$_.Line.Substring(2)})

참고로 파일을 숨기는 반대 명령도 있습니다.

git update-index --skip-worktree $(git ls-files --modified)

Tortoor Git을 사용하는 사용자:

  1. 폴더 또는 특정 파일을 마우스 오른쪽 단추로 클릭한 다음TortoiseGit > Check for modifications
  2. 확인만Show ignore local changes flagged files무시한 파일(또는 폴더를 마우스 오른쪽 단추로 클릭한 경우 무시한 모든 파일)이 표시됩니다.
  3. 파일을 마우스 오른쪽 단추로 클릭하고 선택합니다.Unflag as skip-worktree and assume-unchanged

이 답변은 Windows(윈도우)를 사용하는 기술 수준이 낮은 사용자를 대상으로 합니다.

어떤 파일에서 "작업 트리 건너뛰기"를 클릭했는지 기억하지 못하거나 모르는 경우 다음을 사용합니다.

git ls-files -v             //This will list all files, you are looking for the ones with an S at the beginning of the line. 

git ls-files -v | grep "S " //Use this to show only the lines of interest. Those are the files that have "skip-worktree".

문제 해결 방법:

파일로 이동할 수 있습니다. -> 마우스 오른쪽 버튼을 클릭하여 이전 버전으로 복원 -> 상단의 "git" 탭을 클릭합니다. -> "skip-worktree" 확인란의 선택을 취소합니다. -> 하단의 "Apply"(적용).

파일이 너무 많아 손으로 수정할 수 없는 경우 다른 답변을 참조해야 합니다.

PowerShell 사용자의 경우 @yossico의 bash 별칭에서 영감을 얻은 몇 가지 함수(에일리어스)가 있습니다.

<#
Command: gitskipped
Description: List skipped files in git
Usage: gitskipped
#>
function gitskipped {
  (git ls-files -v $args) -split "\r\n" | Select-String -Pattern '^S ' | ForEach-Object {
    Write-Output $_.Line.Substring(2)
  }
}


<#
Command: gitskip
Description: Mark file(s) as "skip-worktree" in git
Usage: gitskip .env
#>
function gitskip {
  git update-index --skip-worktree $args
}


<#
Command: gitunskip
Description: Unmark file(s) as "skip-worktree" in git
Usage: gitunskip .env
#>
function gitunskip {
  git update-index --no-skip-worktree $args
}


<#
Command: gitunskipall
Description: Unmark all skipped files in git
Usage: gitunskipall
#>
function gitunskipall {
  $files = @((git ls-files -v $args) -split "\r\n" | Select-String -Pattern '^S ' | ForEach-Object { $_.Line.Substring(2) })
  git update-index --no-skip-worktree $files
}

언급URL : https://stackoverflow.com/questions/11131197/undo-git-update-index-skip-worktree

반응형