2010-02-06 20 views
29

मैं कोशिश:आप गिट में एकाधिक फ़ाइलों को कैसे स्थानांतरित करते हैं?

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

+0

मैं शायद कहना चाहिए कि मैं macports Git चल रहा हूँ (संस्करण 1.6.6.1) एक पर मैक। –

उत्तर

21

यह Git की वर्तमान मास्टर शाखा में निर्धारित किया गया है, यह अभी तक एक रिलीज के निर्माण में v1.7.0-RC0 में है, लेकिन नहीं।

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

इस बीच करने का सबसे आसान बात या तो git mv फ़ाइलों को व्यक्तिगत रूप से या सिर्फ mv उपयोग करने के लिए और फिर मैन्युअल सूचकांक अद्यतन करने के लिए, उदाहरण के लिए है git add -A के साथ यदि आपके पास .gitignore पैटर्न उचित हैं।

+0

मैं याद किया था- ए जोड़ने के लिए एक स्विच के रूप में, बहुत उपयोगी :) – Pondidum

+0

गिट एड ./ भी काम करता है! लेकिन इससे भी बेहतर यह है कि कम से कम गिट संस्करण 1.9 और बाद में, एक साथ कई फाइलों को स्थानांतरित करने की क्षमता पूरी तरह से ठीक काम करती है। – Kzqai

12

जब तक कार्यशील निर्देशिका में कोई अन्य परिवर्तन नहीं होता है, तब तक सबसे आसान तरीका है कि आप उन्हें स्वयं ले जाएं और फिर 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 
+1

मैं यह नहीं कह सकता कि यह अच्छा है, लेकिन मैंने कभी भी 'git rm' का उपयोग नहीं किया है - बस फ़ाइलों को स्वयं ले जाएं और बाद में उन्हें जोड़ने के लिए' git' बताएं। अच्छी बात यह है कि, 'गिट' उन्हें एक ही फाइल के रूप में पहचानता है। – phunehehe

+0

धन्यवाद, यह विंडोज़ पर मेरे लिए काम किया! – Schmuli

8

वर्क्स मेरे लिए:

$ 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

यह अजीब बात है, यह मेरे लिए 1.6.6 में काम नहीं करता है। –

+0

मैं एक नए संस्करण के साथ प्रयास करूंगा – wich

+0

गिट संस्करण 1.7.9 में मेरे लिए काम करता है। आप वाइल्डकार्ड्स 'गिट एमवी [एबीसीडी] बार/'(हालांकि मुझे लगता है कि खोल उन्हें फैलाता है, इसलिए गिट इसे विच के समाधान के समान ही देखता है। – idbrii

18

मैं बैश पाश का उपयोग करें:

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

क्या इसका नाम बदलने के लिए संशोधित किया जा सकता है उदाहरण के लिए सभी 'a_1_b.ext' ->' a_2_b.ext'? – Leo

8

Windows में (आलीशान ~ Git):

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

धन्यवाद, आप यह जांचने के लिए -एन स्विच का उपयोग कर सकते हैं कि यह काम करेगा (तथाकथित ड्राई-रन)। उपयोगी। क्या कोई जानता है कि SourceTree से ऐसा कैसे करें? मुझे वहां कमांड नहीं मिल रहा है। –

संबंधित मुद्दे

 संबंधित मुद्दे