When inside a git repository in Powershell or CMD, issuing
git mv * whatever
will return
fatal: bad source, source=*, destination=whatever
This works fine when using MSYS (Git Bash).
When inside a git repository in Powershell or CMD, issuing
git mv * whatever
will return
fatal: bad source, source=*, destination=whatever
This works fine when using MSYS (Git Bash).
As has been pointed out by others in this thread, the star does not automatically expand to file names in PowerShell. Thus, the command let get-childItem
needs to be used, which explicitely tells PowerShell to expand wildcard characters.
You want to put the result of get-childItem *
into parentheses so that they are expanded before the entire git mv
command is executed:
git mv (get-childItem *) whatever
To save a few key strokes, you might want to use the alias gci
for get-childItem
:
git mv (gci *) whatever
-k
flag to skip commands that produce errors. For example, if you're copying items to a subdirectory that already exists, you'll get can not move directory into itself
.
As @PetSerAI said, the Windows command prompt and PowerShell will not expand the globing characters and it makes git mv
fail.
Use a bash shell like MSYS instead.
dir *.txt
for example. Git just assumes its working in a *nix shell.
Jan 14, 2021 at 17:27
Using PowerShell to move the content of source
to whatever
folder you can run this command:
Get-ChildItem .\source\ | ForEach-Object { git mv $_.FullName .\whatever\ }
Your directory structure would look like this before:
+--C:\code\Project\
|
+----+bootstrap.py
+----+requirements.txt
+----+.gitignore
+----+source
|
+---------+manage.py
+---------+modules
+---------+templates
+---------+static
+----+whatever
|
+---------+cool.py
And after running would look like this:
+--C:\code\Project\
|
+----+bootstrap.py
+----+requirements.txt
+----+.gitignore
+----+source
+----+whatever
|
+---------+cool.py
+---------+manage.py
+---------+modules
+---------+templates
+---------+static