Как Вы перемещаете несколько файлов в мерзавца?

Я пробую:

git mv a.py b.py src/

и доберитесь

fatal: multiple sources for the same target, source=b.py, destination=src/b.py

Используя флаг-n, как так git mv -n a.py b.py src/ дает мне:

Checking rename of 'a.py' to 'src/b.py'
Checking rename of 'b.py' to 'src/b.py'
fatal: multiple sources for the same target, source=b.py, destination=src/b.py

Я делаю что-то действительно глупое? Я использую версию 1.6.6.1 мерзавца

38
задан Costique 5 May 2012 в 06:57
поделиться

4 ответа

Это было исправлено в текущей мастер-ветке git'а, это в v1.7.0-rc0, но ещё не в сборке релиза.

http://git.kernel.org/?p=git/git.git;a=commit;h=af82559b435a2a18f38a4f47a93729c8dc543d3

Между тем, проще всего сделать либо git mv файлы по отдельности, либо просто использовать mv, а затем обновлять индекс вручную, e. g. с помощью git'а добавить -A, если у вас есть соответствующие .gitignore паттерны.

25
ответ дан 27 November 2019 в 03:22
поделиться

Пока в рабочем каталоге нет других изменений, самый простой способ - просто переместить их самостоятельно, а затем использовать git add -A . Вот:

$ ls
a.py b.py
$ mkdir src
$ mv *.py src
$ git status
# Changed but not updated:
#       deleted:    a.py
#       deleted:    b.py
# Untracked files:
#       src/
$ git add -A
$ git status
# Changes to be committed:
#       renamed:    a.py -> src/a.py
#       renamed:    b.py -> src/b.py
15
ответ дан 27 November 2019 в 03:22
поделиться

Подходит для меня:

$ git --version
git version 1.6.4.1
$ mkdir foo
$ cd foo
$ git init
Initialized empty Git repository in /home/wich/foo
$ touch a b c d
$ git add a b c d
$ git commit -m "foobar"
[master (root-commit) 11051bd] foo
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
 create mode 100644 b
 create mode 100644 c
 create mode 100644 d
$ mkdir bar
$ git mv a b c d bar
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       renamed:    a -> bar/a
#       renamed:    b -> bar/b
#       renamed:    c -> bar/c
#       renamed:    d -> bar/d
#
9
ответ дан 27 November 2019 в 03:22
поделиться

Я использую цикл bash:

for FILE in src/*.h; do git mv $FILE include/; done
26
ответ дан 27 November 2019 в 03:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: