মার্কুরিয়াল রূপান্তর ফাইলের নাম এনকোডিং


12

আমার অ্যাপাচে মোড_উজজি নিয়ে মার্চারিয়াল সংগ্রহস্থল চলছে। ভান্ডারগুলিতে উইন্ডোজ -১৫১ এ সমস্ত ফাইলের নাম এনকোড করা আছে। এই এনকোডিংটি icallyতিহাসিক কারণে ব্যবহৃত হয়: এগুলি এসএনএন থেকে পার্কিয়াল রূপান্তরিত হয়েছিল, উইন্ডোজ -১২১১ রাশিয়ান লোকেলের জন্য ডিফল্ট উইন্ডোজ এনকোডিং।

এখন প্রোগ্রামাররা কোড পর্যালোচনার জন্য ক্রুসিবল সরঞ্জামটি ব্যবহার করতে চান । এটি utf-8 ব্যতীত অন্য কোনও এনকোডিংগুলিতে ফাইলের নামগুলি আন্ডারন্ডার করতে পারে না। সুতরাং আমি তাদের উইন্ডোজ -১২১১ থেকে ইউটিএফ -8 এ রূপান্তর করতে হবে। কেউ কি জানেন, এটা কিভাবে করে? মার্চুরিয়াল রূপান্তর এক্সটেনশনের এনকোডিংগুলিকে রূপান্তর করার বিকল্প নেই।

hgweb.config:

[web]
#encoding = UTF-8
encoding = windows-1251
#allow_archive = gz, zip, bz2
allow_archive = zip
allow_push = *
push_ssl = false

[extensions]

[collections]
/data/mercurial = /data/mercurial

1
রাশিয়ান ফাইলের নাম ?! ফাইল-নাম পরিবর্তন সম্পর্কে চিন্তা করবেন না?
অলস ব্যাজার

1
আমি সিস্টেম অ্যাডমিনিস্ট্রেটর, বিকাশকারী নই, আমার দায়িত্ব স্থিতিশীল কাজের পরিষেবা সরবরাহ করা, এটি কীভাবে ব্যবহার করবেন তা শিখতে হবে না।
সেলিবানোভ পাভেল

ম্যাট ম্যাকল বহু আগে লিখেছেন , সম্ভবত ইতিমধ্যে পুরানো # আপনি যদি নিজের ডিফল্ট # লোকেল অক্ষর পরিবর্তে ইউটিএফ -8 দিয়ে পৃষ্ঠা পরিবেশন করতে চান তবে নীচের লাইনগুলিকে নিঃশর্ত করে আপনি এটি করতে পারেন। # নোট করুন যে এটি আপনার .hgrc ফাইলগুলিকে # ইউটিএফ -8 এবং আপনার সমস্ত রেপো ফাইলগুলি ইউটিএফ -8 ব্যবহার করে প্রদর্শিত হবে। # # ইম্পোর্ট # # ওএস.ইনোভার্ন ["HGENCODING"] = "ইউটিএফ -8"
অলস ব্যাজার

আমি উত্তর নিচে মন্তব্য লেখা করেছি: পরিবর্তন encoding = windows-1251করতে encoding = UTF-8অপাঠ্য শুধু তৈরি ফাইলের নামের। এর কারণ এটি উইন্ডোজ -১১২১ এ সঞ্চিত রয়েছে। "UTF-8" os.en वातावरण ["HGENCODING"] = "ইউটিএফ -8" এই সেটিংয়ের সমান।
সেলিবানোভ পাভেল

উত্তর:


6

আপনি ঠিক বলেছেন যে রূপান্তর এক্সটেনশনটি বর্তমানে একটি দুর্দান্ত উপায়ে এটি সমর্থন করে না। অর্থাৎ তুমি কি এটা recode করার এনকোডিং থেকে অনুরোধ করতে পারেন এক্স এনকোডিং করার ওয়াই । তবে, আপনি একে একে ফাইলগুলির নাম পরিবর্তন করতে বলতে পারেন! প্রথম নামক কোনো ফাইল তৈরি rename.pyসঙ্গে

import sys
for path in sys.stdin:
    old = path[:-1] # strip newline
    new = old.decode("cp1251").encode("utf-8")
    print 'rename "%s" "%s"' % (old, new)

তারপরে দৌড়াও

$ hg manifest --all | python rename.py > rename.txt

এটি আপনার ফাইলের মানচিত্র তৈরি করে। আপনি এখন ব্যবহার করতে পারেন

$ hg convert --filemap rename.txt cp1251-repo utf-8-repo

সংগ্রহস্থলটিকে নতুন ভাণ্ডারে রূপান্তর করতে। নতুন সংগ্রহস্থলে, দেখে মনে হবে ফাইলগুলি সর্বদা UTF-8 ফাইলের নাম ব্যবহার করে সংরক্ষণ করা হয়েছে।

দ্রষ্টব্য: ফাইলের নামগুলি এখন সংগ্রহশালায় ইউটিএফ -8 হিসাবে সংরক্ষিত আছে। এর অর্থ হ'ল চেকআউটগুলি আধুনিক লিনাক্স মেশিনগুলিতে সূক্ষ্ম দেখাবে। উইন্ডোজ অবশ্য ইউটিএফ -8 ফাইলের নাম ব্যবহার করে না। FixUtf -8 এক্সটেনশন হল UTF-16 ফ্লাইটে মধ্যে Mercurial ধর্মান্তরিত হল UTF-8 ফাইলের নাম করতে ব্যবহার করা আবশ্যক। এটি উইন্ডোতেও পঠনযোগ্য ফাইলের নাম তৈরি করবে।

দ্রষ্টব্য: প্রত্যেককে নতুন ভাণ্ডার পুনরায় ক্লোন করতে হবে! ইতিহাসের কোনও অংশ পরিবর্তন অনিবার্যভাবে সমস্ত পরিবর্তনসেট হ্যাশগুলিকেও পরিবর্তন করে। সুতরাং এটিকে টানতে, আপনার প্রয়োজন হয়

  1. সবাইকে সার্ভারে চাপ দিন,
  2. সার্ভারে সংগ্রহস্থলগুলিকে রূপান্তর করুন,
  3. লোকদের পুনরায় ক্লোন করুন

অথবা

  1. প্রত্যেককে উপরের কমান্ডগুলি তাদের স্থানীয় সংগ্রহস্থলে চালিত করুন
  2. সার্ভারে সংগ্রহস্থলগুলিকে রূপান্তর করুন

যে কোনও উপায়ে কাজ করে যেহেতু রূপান্তরটি নির্বিচারবাদী এবং তাই আপনার ব্যবহারকারীরা যদি পাইথন উপলভ্য থাকেন তবে এটি সেগুলি নিজে চালাতে পারে। যদি তাদের কেবলমাত্র টরটোইএইচজি ইনস্টলেশন থাকে তবে আপনি যদি তাদের সার্ভারে রূপান্তর করেন তবে এটি সম্ভবত সবচেয়ে সহজ।

আমি রূপান্তর এক্সটেনশানটিকে এটিকে আরও সরাসরি সমর্থন করার দিকে তাকিয়েছি এবং এর জন্য আরও সরাসরি সহায়তার জন্য মার্চুরিয়াল মেলিং লিস্টে একটি প্যাচ পাঠিয়েছি


আমি মেলিংলিস্টে একটি সম্পূর্ণ প্যাচ পোস্ট করেছি ।
মার্টিন গিজলার

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

আহ, সমস্যা সমাধান হয়েছে :-) আমার উত্তরটি যখন আপনি চেষ্টা করে নিচ্ছেন তবে নির্দ্বিধায় অনুভব করুন।
মার্টিন গিজার

কোনও এইচজি - ম্যানিউটারিয়াল সমস্ত প্রকাশ 1.8। আমি এইচজি - ম্যানিফেস্ট -r টিপ ব্যবহার করেছি। লিনাক্স মেশিনে সবকিছুই কাজ করে: আমি hgweb.config এ এনকোডিং = ইউটিএফ -8 সহ রেপোতে যথাযথ ফাইল নামগুলি দেখতে পাই এবং ক্লোনযুক্ত সংগ্রহস্থলে ফাইলের নামগুলি সঠিক। উইন্ডোজ মেশিনে আমি ক্লোনটির পরে "Пояснител СЊРЅР ° СЏ СЏ Р · Р ° ° ° ° .docx "ফাইলের নাম পেয়েছি।
সেলিভানভ পাভেল

হ্যাঁ, এটি প্রত্যাশা করা উচিত - আপনি উইন্ডোজটিতে ক্লোন করলে ফাইলের নামগুলি পুনরায় কোড করা হয় না এবং তাই আপনার চেকআউটটি আবর্জনা হয়ে যায়। আপাতত ফিক্সআউটএফ 8 এক্সটেনশনটি ব্যবহার করুন।
মার্টিন গিজলার

2

আমারও একই সমস্যা ছিল। আমার গুচ্ছ সংগ্রহস্থলগুলিকে রূপান্তর করতে হবে, তাই আমি একটি স্ক্রিপ্ট লিখেছিলাম যা তালিকা হিসাবে প্রদত্ত সমস্ত ভান্ডারগুলিকে রূপান্তর করে।

ব্যবহার:

hg_convert_filenames_encoding.py [-h] [-i INPUT_ENCODING] [-o OUTPUT_ENCODING] [-b] [-u] [repositories [repositories ...]]

আপনি বিটবকেটে আমার সংগ্রহশালা থেকে পেতে পারেন ।


0

মার্চুরিয়াল উইকি এফওয়াইআই থেকে কেবল নিষ্কাশন

নিম্নলিখিতগুলি অজানা এনকোডিংয়ে স্পষ্টভাবে বাইনারি ডেটা হিসাবে বিবেচনা করা হয়:

  • ফাইল সামগ্রী
  • ফাইলের নাম

এই আইটেমগুলিকে বাইনারি ডেটা হিসাবে বিবেচনা করা উচিত এবং যেখানেই সম্ভব ক্ষতিহীনভাবে সংরক্ষণ করা উচিত।

সুতরাং, আমি মনে করি, কেবল প্রেজেন্টেশন চরসেট পরিবর্তন করা encoding =পুরু করতে পারে

যদি এই অনুমানটি ভুল হয় (এটি সর্বদা সম্ভব) তবে ফিক্সইউটিএফ 8 এক্সটেনশন চেষ্টা করুন , অংশটি পড়ুন সাবধানতার সাথে রিডমে থেকে বিদ্যমান ফাইলের নামগুলি স্থির করে


পরিবর্তন encoding = windows-1251করার জন্য encoding = UTF-8অপাঠ্য শুধু তৈরি ফাইলের নামের। ফিক্স ইউটিএফ 8 খুব একটা সহায়তা করে নি।
সেলিবানোভ পাভেল

ঠিক আছে. এনকোডিং = উইন্ডোজ -1211 ফিরে ফিরে আসার চেষ্টা করুন AddDefaultCharset utf-8এবং অ্যাপাচে চেষ্টা করুন । আরেকটি ধারণা - ইউটিএফ 8 দিয়ে ডাব্লুএএমএপকে এলএএমপিতে স্থানীয় হিসাবে পরিবর্তন করুন এবং ফাইলের নাম দিয়ে কিছু না করে encoding = UTF-8আবার করুন
অলস ব্যাজার

এই হল ল্যাম্প। পুরানো দিনগুলিতে ডাব্লুএএমএপি-তে সাবভারসিওনের সাহায্যে সংগ্রহস্থল স্থাপন করা হয়েছিল, পরে আমি এটিকে মার্চুরিয়ালে রূপান্তরিত করে ইউটিএফ -8 লোকেলের সাহায্যে লিনাক্স মেশিনে স্থানান্তরিত করেছি। encoding = windows-1251সেট করা হয়েছিল কারণ ডেটা ইতিমধ্যে এই এনকোডিংয়ে ছিল।
সেলীবানভ পাভেল

উইকি আবার পড়ুন! 1251 কেবল উপস্থাপনা স্তর, সঞ্চয়স্থান নয়
অলস ব্যাজার

অজানা এনকোডিংয়ে স্পষ্টভাবে বাইনারি ডেটা হিসাবে বিবেচনা করা হয় এবং এই এনকোডিংটি উইন্ডোজ -১২১১, ফাইলের নাম এতে সংরক্ষণ করা হয়। সেগুলি ইউটিএফ -8 এ রূপান্তর করার জন্য আমার কিছু উপায় দরকার
সেলিভানভ পাভেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.