Powershell指令備份git原始碼管理中未修改的檔案以外的所有文件

Powershell指令備份git原始碼管理中未修改的檔案以外的所有文件

我有一個包含許多 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

(根據您的用例,存儲可能還不夠,但它不太為人所知,所以也許它會很有用。)

相關內容