গিতে ফাইলের নামের মূলধন পরিবর্তন করা


473

আমি আগে যা ছিল তার থেকে আলাদা আলাদা মূলধন রাখার জন্য একটি ফাইলের নাম পরিবর্তন করার চেষ্টা করছি:

git mv src/collision/b2AABB.js src/collision/B2AABB.js
fatal: destination exists, source=src/collision/b2AABB.js, destination=src/collision/B2AABB.js

আপনি দেখতে পাচ্ছেন, গিট এটির উপরে একটি উপযুক্ত নিক্ষেপ করছে। আমি ঠিক প্লেইন পুরাতন mvকমান্ডটিও পুনরায় নামকরণের চেষ্টা করেছি, তবে গিট নামটি পুনর্নবীকরণ করে না (একটি নাম হিসাবে বা একটি নতুন চিহ্নবিহীন ফাইল হিসাবে)।

একই নামের আলাদা আলাদা মূলধন রাখতে আমি কীভাবে একটি ফাইল পরিবর্তন করতে পারি? আমি জ্যাক শেল (zsh) 4.3.15 ব্যবহার করে গিট 1.7.9.1 নিয়ে ম্যাক ওএস এক্স ভি 10.7.3 (সিংহ ) এ আছি।


49
এটি কারণ ওএসএক্স ফাইল সিস্টেমটি কেস সংরক্ষণ করে এবং ডিফল্টরূপে সংবেদনশীল থাকে। আপনি কেবল দুটি ধাপে এগিয়ে যেতে পারেন:git mv myfile foo; git mv foo MyFile
টনিও

16
এটি "গিট এমভি - ফোর্স মাইফাইল মাইফাইল" এর সাথে কাজ করছে।
মার্সেলো ডি বিক্রয়

3
এর প্রতারিত stackoverflow.com/questions/6899582/...
jackocnr

7
গিট ২.০.১ (জুন ২০১৪) শুরু করা, git mv hello.txt Hello.txtকেস সংবেদনশীল ওএসে কাজ করবে। দেখুন নিচের আমার উত্তর
VonC

উত্তর:


554

গিট ২.০.১ (জুন 25, 2014) শুরু করা, একটি git mvকেবল সংবেদনশীল ওএসে কাজ করবে

ডেভিড টার্নার ( ) দ্বারা প্রতিশ্রুতিবদ্ধ baa37bf দেখুন ।dturner-tw

mv: সংবেদনশীল ফাইল সিস্টেমগুলির ক্ষেত্রে কেস ঠিক করার জন্য পুনরায় নামকরণের অনুমতি দিন

" git mv hello.txt Hello.txt" একটি মামলা অবশ ফাইলসিস্টেম সবসময় ট্রিগার এ " destination already exists" ত্রুটি, কারণ এই দুটি নাম দেখুন ফাইলসিস্টেম এর বিন্দু থেকে একই পথ পড়ুন এবং ব্যবহারকারী দিতে "প্রয়োজন --forceযখন পথ সূচক এবং রেকর্ডকৃত ভূমির ক্ষেত্রে সংশোধন" পরবর্তী প্রতিশ্রুতিবদ্ধ

এই কেসটি সনাক্ত করুন এবং " --force" প্রয়োজন ছাড়াই অনুমতি দিন ।

git mv hello.txt Hello.txtশুধু কাজ করে (আর --forceপ্রয়োজন নেই)।


অন্য বিকল্পটি হ'ল:

git config --global core.ignorecase false

এবং সরাসরি ফাইলটির নাম পরিবর্তন করুন; গিট অ্যাড এবং কমিট।


2
এফডব্লিউআইডাব্লিউ এটি উইন্ডোজে কখনই কাজ করে নি বা কখনও কাজ করে নি। 2.15.1.windows.2 এ am এবং এখনও
ফোর্স

1
@ অ্যাডোরাথ দুর্দান্ত খবর!
ভোনসি

এটি কি এক্সটেনশনের মূলধনীকরণের জন্যও কাজ করবে উদাহরণস্বরূপ, যদি ফাইলের নাম চিত্র থাকে X টিএক্সটি এবং আমি এটির নাম পরিবর্তন করতে চাই চিত্র.টিএসটি
সিলুভেরু কিরণ কুমার

@ সিলুভারুকিরানকুমার হ্যাঁ Use ইউসকেস নিয়ে আপনার কোনও সমস্যা আছে?
ভোনসি

1
এই কমান্ডটি চালিয়ে উইন্ডোতে কাজ করার জন্য এটি পেয়েছেন এবংgit config core.ignorecase false
জন তারগারিয়ান

452

লারস্কের উত্তর বিবেচনা করে আপনি এটি "--for" দিয়ে একটি একক কমান্ড দিয়ে কাজ করতে পারবেন:

 git mv --force myfile MyFile

3
যদি আপনি কোনও ক্ষেত্রে সংবেদনশীল ফাইল সিস্টেমে থাকেন এবং আপনি মারাত্মক ত্রুটি পেয়েছেন "অবৈধ তর্ক" এর পরিবর্তে এই পদক্ষেপগুলি ব্যবহার করে দেখুন: স্ট্যাকওভারফ্লো
লেবি

1
যদিও এটি প্রথম পদক্ষেপের সঠিক উত্তর, যখন অন্য শাখায় পুরানো মূলধন থাকে তখন আপনি কীভাবে ম্যাক ওএস এক্স এর অধীনে অন্য কোনও শাখায় স্যুইচ করতে যাবেন। আমি **** ত্রুটি পেয়েছি: নীচের তালিকায় থাকা কর্মক্ষম গাছের ফাইলগুলি চেকআউট দ্বারা ওভাররাইট করা হবে: ****
টিজেচামার্স

1
এটি আমার উইন্ডোতে প্রতিশ্রুতিবদ্ধতায় ব্যর্থ হয়েছিল:Error: Will not add file alias 'MyFile' ('myfile' already exists in index)
অরেঞ্জডগ

97

কখনও কখনও আপনি কোনও মামলা সংবেদনশীল ফাইল সিস্টেমের (যেমন ওএস এক্স বা উইন্ডোজে) ফাইল ফাইলের প্রচুর নামের মূলধন পরিবর্তন করতে চান। এরকম git mvকমান্ড দ্রুত ক্লান্ত হবে। জিনিসগুলিকে কিছুটা সহজ করার জন্য আমি এটি করি:

  1. ডেস্কটপ বলে, ডিরেক্টরের বাইরে সমস্ত ফাইল সরিয়ে দিন।
  2. git add . -Aসমস্ত ফাইল অপসারণ করতে একটি করুন ।
  3. ডেস্কটপের সমস্ত ফাইলকে যথাযথ মূলধনীতে নামকরণ করুন।
  4. সমস্ত ফাইলগুলি মূল ডিরেক্টরিতে ফিরে যান।
  5. git add .। গিটে দেখতে হবে যে ফাইলগুলির নাম পরিবর্তন করা হয়েছে।

এখন আপনি একটি প্রতিশ্রুতিবদ্ধ করতে পারেন যে আপনি ফাইলের নাম মূলধন পরিবর্তন করেছেন।


3
আপনি যে ফাইলগুলিতে যান এবং বাইরে যান, সমস্ত ইতিহাসের ব্যয়েই এটি আসে? আমি গিট এমভি অনুমান করছি - বলের এই ঘাটতি নেই।
লস

12
না, এটি ইতিহাসের সমস্ত সরাবে না। লক্ষ্য করুন যে দুটি সংযোজনের মধ্যে কোনও প্রতিশ্রুতি নেই।
মাইকেল এল পেরি

63

ওএস এক্স এর অধীনে ফাইলের নামগুলি সংবেদনশীল নয় (ডিফল্টরূপে)। এটি গিট সমস্যার চেয়ে ওএসের সমস্যা। আপনি যদি ফাইলটি সরিয়ে এবং পড়েন তবে আপনি যা চান তা পাওয়া উচিত, বা এটি অন্য কোনও নামকরণ করা উচিত এবং তারপরে পুনরায় নামকরণ করা উচিত।


2
আপনি git cloneএকটি লিনাক্স সিস্টেমে রেপোও করতে পারেন , ফাইলগুলির নাম পরিবর্তন করতে পারেন এবং কেবলমাত্র এই পরিস্থিতিতে (যদি আপনার কাছে লিনাক্স সিস্টেম হাতে রয়েছে) এর জন্য প্রতিশ্রুতিবদ্ধ করতে পারেন।
gitaarik

4
প্রকৃতপক্ষে, ওএস এক্স-তে ফাইল সিস্টেমগুলি কেস-সংবেদনশীল হতে পারে, আপনি এটি ইনস্টলেশনে কনফিগার করতে পারেন। কোনও ওএস এক্স পার্টিশন কেস-সংবেদনশীল কিনা তা কীভাবে পরীক্ষা করবেন
ফ্লেম

2
... সুতরাং উত্তরে "(ডিফল্টরূপে)"।

4
নিশ্চিত করার জন্য, আপনি git rm --cached fileorfolderফাইল সিস্টেম থেকে ফাইল বা ফোল্ডারটি সরিয়ে না দিয়ে গিট থেকে ফাইল বা ফোল্ডারটি সরাতে ব্যবহার করতে পারেন। তারপরে আপনি কেবল ফাইল বা ফোল্ডারটি দিয়ে আবার যুক্ত করতে পারেন git add fileorfolder
কাস

32

সেট ignorecaseথেকে falseGit কনফিগ মধ্যে

মূল পোস্টটি "গিটের মধ্যে ফাইলের নাম পরিবর্তনের মূলধন" সম্পর্কে:

আপনি যদি আপনার প্রকল্পে কোনও ফাইলের নামের মূলধন পরিবর্তন করার চেষ্টা করছেন, আপনাকে গিট থেকে জোর করে নামকরণের প্রয়োজন হবে না । আইএমও, আমি বরং আমার আইডিই / সম্পাদক থেকে মূলধনটি পরিবর্তন করব এবং পুনর্নামকরণটি চয়ন করতে আমি গিটকে সঠিকভাবে কনফিগার করেছি তা নিশ্চিত করে তুলব।

ডিফল্টরূপে, গিট টেম্পলেট কেস উপেক্ষা করার জন্য সেট করা হয় (গিট কেস সংবেদনশীল)। আপনার ডিফল্ট টেমপ্লেট রয়েছে তা যাচাই করতে --getএকটি নির্দিষ্ট কীটির জন্য মানটি পুনরুদ্ধার করতে ব্যবহার করুন । ব্যবহারের --localএবং --globalগীত নির্দেশ করা হবে কিনা তা আপনার স্থানীয় গীত সংগ্রহস্থল কনফিগারেশনের বা বিশ্বব্যাপী এক থেকে একটি কনফিগারেশন কী-মান নিতে। উদাহরণস্বরূপ, আপনি যদি নিজের বিশ্বব্যাপী কীটি দেখতে চান core.ignorecase:

git config --global --get core.ignorecase

যদি এটি ফিরে আসে তবে trueএটিকে এটি হিসাবে সেট করে নিন তা নিশ্চিত করুন:

git config --global core.ignorecase false

(গ্লোবাল পরিবর্তনের জন্য আপনার কাছে যথাযথ অনুমতি রয়েছে তা নিশ্চিত করুন)) এবং সেখানে আপনার এটি রয়েছে; এখন আপনার গিট ইনস্টলেশন মূলধনকে উপেক্ষা করবে না এবং সেগুলি পরিবর্তন হিসাবে বিবেচনা করবে।

একটি পরামর্শ হিসাবে, আপনি যদি বহু ভাষা প্রকল্পে কাজ করছেন এবং আপনি মনে করেন যে সমস্ত প্রকল্পগুলি গিট দ্বারা কেস-সংবেদনশীল হিসাবে বিবেচনা করা উচিত নয়, কেবল স্থানীয় core.ignorecaseফাইলটি আপডেট করুন।


6
আর git config --global --get core.ignorecaseকিছু না ফেরালে। এটা কি true?? কারণ আমি এটি সেট করার পরে falseএটি মিথ্যা (উইন্ডোজ 10)
ফেরায়

এবং এটি প্রত্যাশার মতো কাজ করছে না বলে মনে হচ্ছে। আমি ডেস্কটপ ক্লায়েন্টটি পরিবর্তনটি দেখতে চাইছি কিন্তু প্রতিশ্রুতিবদ্ধ / সিঙ্ক করার পরে, ফাইলের নামটি অনলাইনে অপরিবর্তিত রয়েছে!
fralbo

আমার জন্য কাজ করেছে (এবং একাধিক ফাইল ব্যবহারের চেয়ে ভাল git mv)। আমি এটিও ধরে নিচ্ছি যে ডিফল্টরূপে এটি সত্য হিসাবে বিবেচিত হয় (যেমন এটি কেস উপেক্ষা করে)। হয় তা, বা এটি নাম আবরণ ফাইল করার জন্য ওএসের নীতির সাথে মেলে।
জেরি 10

এই উত্তর। সবেমাত্র এটি ব্যবহার করেছেন।
ডেভ এভারিট

1
এটি নির্বাচিত উত্তর হওয়া উচিত
ডেভ এভারিট

8

আপনি ".git" ডিরেক্টরিটি খুলতে পারেন এবং তারপরে "কনফিগারেশন" ফাইলটি সম্পাদনা করতে পারেন। "[কোর]" সেট এর অধীনে, "উপেক্ষা = সত্য" সেট করুন এবং আপনি সম্পন্ন করেছেন;)


1

git mvম্যাকোস-এ লোয়ারকেস করতে বাল্ক ফাইলগুলি:

for f in *; do git mv "$f" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done

এটি একটি ফোল্ডারে সমস্ত ফাইল ছোট করবে।


1

এই পাইথন স্নিপেট git mv --forceডিরেক্টরিতে থাকা সমস্ত ফাইলকে ছোট হাতের করা হবে। উদাহরণস্বরূপ, foo / Bar.js এর মাধ্যমে foo / bar.js হয়ে যাবে git mv foo/Bar.js foo/bar.js --force

এটি আপনার পছন্দ অনুসারে পরিবর্তন করুন। আমি ঠিক শেয়ার করেছি আমি ভাগ করেছি :)

import os
import re

searchDir = 'c:/someRepo'
exclude = ['.git', 'node_modules','bin']
os.chdir(searchDir)

for root, dirs, files in os.walk(searchDir):
    dirs[:] = [d for d in dirs if d not in exclude]
    for f in files:
        if re.match(r'[A-Z]', f):
            fullPath = os.path.join(root, f)
            fullPathLower = os.path.join(root, f[0].lower() + f[1:])
            command = 'git mv --force ' + fullPath + ' ' + fullPathLower
            print(command)
            os.system(command)

-1

কাজের উদাহরণ:

git mv ./src/images/poster_video.PNG ./src/images/poster_video.png

2
আপনার উত্তরটি আসল প্রশ্নটি সমাধান করে না। আপনি এক্সটেনশানটি lowcasing হয়
Tavo

আমি ঠিক এটি খুঁজছি, কিন্তু 500 টি চিত্রের জন্য। আমি Git উপর ./src/images/testimage.png করার ./src/images/TESTIMAGE.png নামান্তর করতে চান
Mohak Londhe
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.