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


0

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

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

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


1
아마도 가장 좋은 방법은 새로운 원격 으로 분기, 커밋 및 푸시하는 것입니다 (백업 드라이브 / 서버의 간단한 git repo / 폴더 일 수 있음). 작업 과 함께 하지 주위, 버전 관리.
Bob

답변:


1

실행할 단일 명령이 있는지 의심합니다. 여기서 순차적으로 실행되는 도구 조합이 필요합니다.

Git에는 repo 내부의 모든 파일을 나열하는 인수가 포함되어 있습니다. 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

유스 케이스에 따라 숨김은 충분하지 않지만 잘 알려지지 않으므로 유용 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.