![git 소스 제어에서 수정되지 않은 파일을 제외한 모든 파일을 백업하는 Powershell 명령](https://rvso.com/image/1567496/git%20%EC%86%8C%EC%8A%A4%20%EC%A0%9C%EC%96%B4%EC%97%90%EC%84%9C%20%EC%88%98%EC%A0%95%EB%90%98%EC%A7%80%20%EC%95%8A%EC%9D%80%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%A0%9C%EC%99%B8%ED%95%9C%20%EB%AA%A8%EB%93%A0%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EB%B0%B1%EC%97%85%ED%95%98%EB%8A%94%20Powershell%20%EB%AA%85%EB%A0%B9.png)
많은 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만으로는 충분하지 않을 수 있지만 잘 알려져 있지 않으므로 유용할 수도 있습니다.)