"git mv *" возвращает "плохой источник" в Powershell

Когда внутри Git-репозитория в Powershell или CMD, выдача

git mv * whatever

вернусь

фатальный: плохой источник, источник =*, пункт назначения = что угодно

Это прекрасно работает при использовании MSYS (Git Bash).

2 ответа

Как уже отмечалось другими в этом потоке, звездочка не расширяется автоматически до имен файлов в PowerShell. Таким образом, команда let get-childItem необходимо использовать, что явно указывает PowerShell на необходимость расширения подстановочных знаков.

Вы хотите поставить результат get-childItem * в круглые скобки, чтобы они раскрывались перед всем git mv команда выполняется:

git mv (get-childItem *) whatever

Чтобы сохранить несколько нажатий клавиш, вы можете использовать псевдоним gci за get-childItem:

git mv (gci *) whatever

Как сказал @PetSerAI, командная строка Windows и PowerShell не будут расширять символы перетаскивания, и это git mv потерпеть поражение.

Вместо этого используйте оболочку bash, например MSYS.

Использование PowerShell для перемещения содержимого source в whatever В папке вы можете запустить эту команду:

Get-ChildItem .\source\ | ForEach-Object { git mv $_.FullName .\whatever\ }

Ваша структура каталогов будет выглядеть так:

+--C:\code\Project\
|
+----+bootstrap.py
+----+requirements.txt
+----+.gitignore
+----+source
|
+---------+manage.py
+---------+modules
+---------+templates
+---------+static
+----+whatever
|
+---------+cool.py

И после запуска будет выглядеть так:

+--C:\code\Project\
|
+----+bootstrap.py
+----+requirements.txt
+----+.gitignore
+----+source
+----+whatever
|
+---------+cool.py
+---------+manage.py
+---------+modules
+---------+templates
+---------+static

Решение для cmd

for %i in (*) do git mv %i whatever/

Это также происходит, когда ваш "исходный" каталог не существует.

Другие вопросы по тегам