У меня есть рабочая папка со многими репозиториями GIT и SVN. Поскольку все исправленные версии доступны на сервере, мне просто нужно сделать резервную копию неверсионных файлов (измененных, но не зафиксированных, не версионных, и игнорировать внутренние метаданные git/svn).

Я предполагаю, что для Windows лучшим подходом является использование конвейера Powershell для вывода списка всех файлов, фильтрации по их статусу (игнорируйте неизмененные) и передачи этих файлов в 7-zip stdin (или промежуточный список файлов) для резервного копирования.

Какую команду мне использовать?

1 ответ1

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

(В зависимости от вашего варианта использования, тайника может быть недостаточно, но он менее известен, поэтому, возможно, он будет полезен.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .