2010-02-06 3 views
29

Denemek:Birden çok dosyayı nasıl taşıyorsunuz?

git mv a.py b.py src/

ve -n bayrağını kullanma

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

olsun, böylece git mv -n a.py b.py src/ bana verir gibi:

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 

Gerçekten mı yapıyorum aptal? Git sürümünü kullanıyorum 1.6.6.1

+0

Herhalde ben MacPorts budala çalıştıran diyebilirim (sürüm 1.6.6.1) bir üzerinde Mac. –

cevap

21

, henüz bir yayın oluşturma v1.7.0-rc0 öyle değil.

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

arada yapılacak basit şey ya git mv dosyaları tek tek ya da sadece mv kullanmak ve daha sonra elle dizinini güncellemek için, örneğin bir Uygun .gitignore desenleri varsa git add -A ile.

+0

Ben, çok yararlı :) Ekle için bir anahtar olarak kaçırdı :) – Pondidum

+0

git ekle ./ Ayrıca çalışır! Ama daha da iyisi, en azından git sürüm 1.9 ve üstü, aynı anda birden fazla dosya taşıma yeteneği tamamen iyi çalışıyor. – Kzqai

12

Çalışma dizininde herhangi bir değişiklik olmadıkça, bunları kendiniz taşımak ve daha sonra git add -A kullanın. Bakın:

$ 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 
+1

Bunun iyi olduğunu söyleyemem ama asla 'git rm' kullanmamıştım - sadece dosyaları kendim taşı ve daha sonra eklemek için 'git' yaz. İyi olan, 'git', onları aynı dosyalar olarak tanır. – phunehehe

+0

Teşekkürler, bu Windows benim için çalıştı! – Schmuli

8

Works benim için: Bu GYTE geçerli ana dalında düzeltildi

$ 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 
# 
+0

Bu garip, benim için 1.6.6'da çalışmıyor. –

+0

Git sürüm 1.7.9'da daha yeni bir sürüm – wich

+0

Çalışmaları ile çalışacağım. Ayrıca joker 'git mv [abcd] bar/'kullanabilirsiniz (Ben kabuğun onları genişletir düşünüyorum, ancak git wich' ın çözüm olarak aynı görür, – idbrii

18

ben bash döngü kullanın: Windows

for FILE in src/*.h; do git mv $FILE include/; done
+0

Bu, örneğin tüm "a_1_b.ext" -> 'a_2_b.ext' olarak yeniden adlandırılmak üzere değiştirilebilir mi? – Leo

8

(lüks ~ git):

foreach ($file in get-childitem *.py) { git mv $file.name ./src } 
+0

Teşekkür ederim, çalışıp çalışmadığını test etmek için -n anahtarını kullanabilirsiniz (kuru çalışma olarak adlandırılır). İşe yarar. Bunu SourceTree'den nasıl yapacağını bilen var mı? Oradaki komutu bulamıyorum. –