Comando Powershell para fazer backup de todos os arquivos, exceto aqueles que não foram modificados no controle de origem do git

0

Eu tenho uma pasta de trabalho com muitos repositórios GIT e SVN. Como as revisões consolidadas estão todas disponíveis no servidor, eu só preciso fazer o backup dos arquivos não versionados (modificados, mas não confirmados, não têm versão e ignoram os metadados git / svn internos).

Eu suponho que para o Windows a melhor abordagem é usar o pipeline do Powershell para listar todos os arquivos, filtrar de acordo com seu status (ignorar os não modificados) e enviar esses arquivos em stdin 7-zip (ou lista intermediária de arquivos) para backup.

Qual comando devo usar?

    
por drizin 08.08.2018 / 01:52

1 resposta

1

Eu duvido que exista um único comando para executar. Você vai precisar de uma combinação de ferramentas em sequência aqui.

O Git inclui um argumento para listar todos os arquivos dentro do repositório: git ls-files

Se você deseja listar apenas os arquivos não rastreados e modificados, use os argumentos -o e -m :

git ls-files -o -m

Se você canalizar isso para uma função do PowerShell, ele virá como uma matriz e você poderá iterar todos esses arquivos e fazer o que quiser com eles. (Eu não conheço bem o SVN, mas presumivelmente deveria haver um comando similar lá.)

Aqui está um arquivo de script que procura por um arquivo .git em seu diretório de trabalho atual, chamadas git ls-files -o -m e canais que saem para outra função que passa por cada arquivo e imprime seu caminho completo. Você pode copiar ou mover ou o que quiser com cada arquivo:

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)

Quando seus arquivos estiverem em um local separado, você poderá executar facilmente o 7-zip na pasta, etc.

Dito isso, parece que o que você pode querer é uma ramificação com apenas as alterações necessárias que você poderia selecionar em cima de qualquer outro conjunto de alterações ou talvez um stash que você poderia reaplicar em cima de um conjunto de alterações e depois reverter vai.

link

(Dependendo do seu caso de uso, stash pode não ser suficiente, mas é menos conhecido, então talvez seja útil.)

    
por 08.08.2018 / 03:25