git 소스 제어에서 수정되지 않은 파일을 제외한 모든 파일을 백업하는 Powershell 명령

git 소스 제어에서 수정되지 않은 파일을 제외한 모든 파일을 백업하는 Powershell 명령

많은 GIT 및 SVN 저장소가 있는 작업 폴더가 있습니다. 커밋된 개정판은 모두 서버에서 사용할 수 있으므로 버전이 지정되지 않은 파일(수정되었지만 커밋되지 않았으며 버전이 지정되지 않았으며 내부 git/svn 메타데이터는 무시함)만 백업하면 됩니다.

Windows의 경우 가장 좋은 접근 방식은 Powershell 파이프라인을 사용하여 모든 파일을 나열하고, 상태에 따라 필터링하고(수정되지 않은 파일은 무시), 백업을 위해 해당 파일을 7-zip stdin(또는 중간 파일 목록)으로 파이프하는 것이라고 가정합니다.

어떤 명령을 사용해야 합니까?

답변1

실행할 명령이 하나도 없는 것 같습니다. 여기서는 순서대로 실행되는 도구 조합이 필요합니다.

Git에는 저장소 내의 모든 파일을 나열하는 인수가 포함되어 있습니다.git ls-files

추적되지 않고 수정된 파일만 나열하려면 -o-m인수를 사용할 수 있습니다.

git ls-files -o -m

이를 PowerShell 함수로 파이프라인하면 배열로 제공되며 모든 파일을 반복하여 원하는 작업을 수행할 수 있습니다. (SVN은 잘 모르지만 아마 거기에도 비슷한 명령어가 있을 것 같습니다.)

.git다음은 현재 작업 디렉토리에서 파일을 찾고 호출 git ls-files -o -m하고 각 파일을 통과하여 전체 경로를 인쇄하는 다른 함수로 출력하는 파이프를 찾는 스크립트 파일입니다. 각 파일에 대해 원하는 대로 복사하거나 이동할 수 있습니다.

function DoSomethingForGitLsFiles {
  param(
    [array]$FileList
  )
  Write-Host $FileList.count 'files found:'
  foreach ($FilePath in $FileList)
  {
    # This is where you could copy your files out somewhere else.
    Write-Host "FILE: $(Get-Location)\$FilePath"
  }
}

function FindGitRepo {
  param(
    [string]$searchPath
  )

  if (Get-ChildItem -Name -Path "$searchPath\*.git") {
    DoSomethingForGitLsFiles (git ls-files -o -m)
  } else {
    Write-Host "No .git repo found."
  }
}

FindGitRepo -SearchPath (Get-Location)

파일이 별도의 위치에 있으면 폴더 등에서 7-zip을 쉽게 실행할 수 있습니다.


즉, 당신이 원하는 것은 다른 변경 세트 위에서 선별적으로 선택할 수 있는 필요한 변경 사항만 포함된 브랜치이거나 변경 세트 위에 다시 적용한 다음 마음대로 되돌릴 수 있는 숨김일 것 같습니다.

https://git-scm.com/docs/git-stash

(사용 사례에 따라 stash만으로는 충분하지 않을 수 있지만 잘 알려져 있지 않으므로 유용할 수도 있습니다.)

관련 정보