উইন্ডোজে ম্যাগিট চরম ধীর। আমি কীভাবে অপ্টিমাইজ করব?


15

আমি একটি প্রকল্পের জন্য উইন্ডোজ 10 ব্যবহার করতে বাধ্য হচ্ছি। হ্যাঁ, আমি বরং জিএনইউ / লিনাক্স ব্যবহার করব। আমার বোধগম্যতা বজায় রাখতে, আমি উইন্ডোজকে ইমাকসের জন্য একটি বুটলোডার হিসাবে বিবেচনা করার চেষ্টা করেছি :)

দুর্ভাগ্যক্রমে, ম্যাজিট (উইন্ডোজে ভাল কমান্ড লাইনের অভাবের জন্য ইমাক্সের আমার প্রিয় অংশগুলির একটি) অসহনীয়ভাবে ধীর গতির। আমার একটি এসএসডি, ১ 16 গিগাবাইট র‌্যাম এবং কোয়াড-কোর আই but রয়েছে তবে এটি একটি ছোট সংগ্রহস্থল চালাতে আট সেকেন্ড সময় নেয় magit-status। তারপরে, যখন আমি অন্য পরিবর্তনটি মঞ্চস্থ করতে চাই, তখন ফাইলটি প্রতি 5 সেকেন্ড সময় নেয় ।

এখানে আমি চেষ্টা করেছি:

  • $ git config --global core.preloadindex true
  • $ git config --global core.fscache true
  • $ git config --global gc.auto 256
  • উইন্ডোজ ডিফেন্ডার (আমার একমাত্র AV) বর্জন তালিকায় পুরো প্রকল্পটি যুক্ত করা হচ্ছে
  • magit-git-executableআমি ডাউনলোড করা নিয়মিত এমএসজিগিট একটিতে সেট করা ( https://git-for-windows.github.io/ )। আমি চেক করেছি এবং git statusএখানে <1 সেকেন্ড সময় লাগে। আমি জানি যে magit-statusআরও বেশি করে, তবে এটি খুব বেশি।

এটিকে দ্রুত করার জন্য কি কেউ পরামর্শ দিতে পারে? আমি উইন্ডোজটিতে Magit ব্যবহার করে এমন কাউকে ভাবতে পারি না।

পরামর্শ দেওয়া হয়েছিল যে এই প্রশ্নটি একটি সদৃশ, তবে তারা জিজ্ঞাসা করেছে:

আমি জানার জন্য লড়াই করছি যে কেন উইন্ডোজের তুলনায় উবুন্টুতে ইমাকগুলি সংক্ষিপ্ত প্রারম্ভকালীন সময় রয়েছে। উত্তর কি কেউ জানে?

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


git-status<1 সেকেন্ড লাগে? এটি মূলত তাত্ক্ষণিক হওয়া উচিত। আদৌ কি কোনও উপলব্ধিযোগ্য বিলম্ব আছে?
পাইথননট

gitকমান্ড লাইন থেকে সমমানের কমান্ডগুলি চালানোর ক্ষেত্রে কি একই সমস্যা রয়েছে ?
ইলেথান

আমি মনে করি এর জন্য magit ডিফল্ট পছন্দ magit-git-executableসম্ভবত একটি বিট দ্রুততর হবে (ইন বেশী cmdএবং bin, আসলে চাদরে যদি executable-findআয় তাদের মধ্যে একজন magit সেট করার প্রচেষ্টা করা হবে magit-git-executable"বাস্তব" Git করার জন্য)। একটি ছোট সংগ্রহশালার জন্য 8 সেকেন্ডের মতো অন্য কিছু ভুল হওয়ার মতো শোনায়, এখানে ম্যাগিটের রেপোর জন্য Windows 0.8 লাগে (উইন্ডোজ 8)।
npostavs


1
এছাড়াও, আরও সঠিক সময়ের জন্য আপনি সেট magit-refresh-verboseকরতে পারেন t
আয়া

উত্তর:


11

আমি আসলে বরং এই অনেক গবেষণা করেছি এবং মৌলিকভাবে সমস্যা উইন্ডোগুলির যে Git হয় sucks

এটি আপস্ট্রিম বাগ: https://github.com/git-for-windows/git/issues/596 এবং এর কারও কারও কাছে সিতে শেল স্ক্রিপ্টগুলি পুনরায় লেখার প্রয়োজন যাতে যাতে আর কোনও কমান্ড ফোর্কিং না হয়। আমার জন্য এটি ইন্টারেক্টিভ রিবেস যা আসল হত্যাকারী (আমি একটি ইন্টারেক্টিভ রিবেস শুরু করতে পারি, চা তৈরি করতে পারি, ফিরে আসতে পারি, কিছু সংবাদ পড়তে পারি, চা পান করতে পারি এবং সম্ভবত এটি শেষ হয়ে যায় It's এটি অনেক লোকের চেয়ে অনেক খারাপ এটি মনে করুন), তবে সাধারণ স্ট্যাটাসের মতো কলগুলি কাজের ধাপে বাধা দেওয়ার পক্ষেও যথেষ্ট।

ম্যাজিট যে কমান্ডগুলি ব্যবহার করে সেগুলি সমর্থন করার জন্য জেজিট আপডেট করা এবং জেভিএম প্রারম্ভকালের সময়টি হ্রাস করার জন্য এটি নেলগুনে চালনা করার বিকল্প হতে পারে, আমি এটি নিয়ে আলোচনা করার জন্য একটি থ্রেড শুরু করেছি: http://dev.eclipse.org/mhonarc/lists/ jgit-দেব / msg03064.html

কিছু সম্ভাব্য স্পিডআপের জন্য আপনি /programming/4485059 পড়তে চাইতে পারেন , তবে সত্যি বলতে আপনি এগুলি খুব কমই লক্ষ্য করবেন।

ম্যাজিটে আপনি যা কিছু করতে পারেন তা হ'ল magit-statusমঞ্চের জন্য একটি সর্বনিম্ন সেট আপ করার ক্ষেত্রে লেখকের পরামর্শ অনুসরণ করা

;; WORKAROUND https://github.com/magit/magit/issues/2395
(define-derived-mode magit-staging-mode magit-status-mode "Magit staging"
  "Mode for showing staged and unstaged changes."
  :group 'magit-status)
(defun magit-staging-refresh-buffer ()
  (magit-insert-section (status)
    (magit-insert-untracked-files)
    (magit-insert-unstaged-changes)
    (magit-insert-staged-changes)))
(defun magit-staging ()
  (interactive)
  (magit-mode-setup #'magit-staging-mode))

সুতরাং, আপনি কি অভিজ্ঞ অভিজ্ঞ সি বা জাভা বিকাশকারীদের জানেন যা গিট বা জেজিট ঠিক করার সমাধানগুলির মধ্যে যে কোনও একটিতে সহায়তা করতে সক্ষম হবেন?


আমি সমস্যাটি শেল স্ক্রিপ্ট বনাম সি এর বিষয়ে এতটা নিশ্চিত নই, কারণ magit-statusসত্যিকার অর্থেও এটি অনেক দীর্ঘ সময় নেয় এবং আমি মনে করি না স্থিতিটি অনেকগুলি শেল স্ক্রিপ্ট ব্যবহার করে।
আয়া

1
এবং "ন্যূনতম" কোডটির জন্য আপনাকে ধন্যবাদ magit-status, এটি আমাকে কিছুটা সাহায্য করবে বলে মনে হচ্ছে (এটি আমার magit-refreshসময়কে ২-৩ সেকেন্ডে হ্রাস করে)।
আয়া

এটি আমি যা চাই ঠিক তাই। ধন্যবাদ!
Hut8

1
হ্যাঁ, magit-stagingআমার জন্যও কয়েক সেকেন্ড সময় লাগে। আমার চিন্তাভাবনা বাধাগুলি যথেষ্ট, তবে আমার দিনকে ধ্বংস করার পক্ষে যথেষ্ট নয়।
fommil

2
magit-statusধীর হওয়ার কারণ হ'ল এটি gitসম্ভবত 10 বা 20 বার ডেকে আনে। জিএনইউ প্ল্যাটফর্মের তুলনায় উইন্ডোজে নতুন প্রক্রিয়া শুরু করা অত্যন্ত ধীর। শেল স্ক্রিপ্টগুলি
এটির

2

অন্য কারণের জন্য call-processকলগুলির তালিকার দিকে সম্প্রতি নজর রেখে, magit-statusআমার কাছে ঘটেছিল যে তাদের মধ্যে কিছুকে ক্যাশে রাখা যেতে পারে। magit-statusম্যাগিটের রেপো সম্পর্কে নিম্নলিখিত পরামর্শ সহ 1.9 থেকে 1.3 সেকেন্ড যায় (মন্তব্যে উল্লিখিত আমার পূর্ববর্তী 0.8s এর পরিমাপটি একটি ভিন্ন (দ্রুত) কম্পিউটারের জন্য ছিল)। যদি আপনি ইতিমধ্যে magit-stagingঅন্য উত্তরটি ব্যবহার করছেন তবে এটি সম্ভবত খুব বেশি সাহায্য করবে না: আমি 0.16 থেকে 0.12 সেকেন্ডে হ্রাস পেয়েছি (তবে এটি পরিমাপের গোলমালের চেয়ে সবেমাত্র বড়)।

সতর্কতা: এটি ক্যাশে আপডেট করার ক্ষেত্রে যত্ন নেয় না, সুতরাং জিনিসগুলি ভুল হতে পারে (বিশেষত যদি আপনি নিজের গিট কনফিগারেশনে ফিড করছেন)।

(defvar-local magit-git--git-dir-cache nil)
(defvar-local magit-git--toplevel-cache nil)
(defvar-local magit-git--cdup-cache nil)

(defun memoize-rev-parse (fun &rest args)
  (pcase (car args)
    ("--git-dir"
     (unless magit-git--git-dir-cache
       (setq magit-git--git-dir-cache (apply fun args)))
     magit-git--git-dir-cache)
    ("--show-toplevel"
     (unless magit-git--toplevel-cache
       (setq magit-git--toplevel-cache (apply fun args)))
     magit-git--toplevel-cache)
    ("--show-cdup"
     (let ((cdup (assoc default-directory magit-git--cdup-cache)))
       (unless cdup
         (setq cdup (cons default-directory (apply fun args)))
         (push cdup magit-git--cdup-cache))
       (cdr cdup)))
    (_ (apply fun args))))

(advice-add 'magit-rev-parse-safe :around #'memoize-rev-parse)

(defvar-local magit-git--config-cache (make-hash-table :test 'equal))

(defun memoize-git-config (fun &rest keys)
  (let ((val (gethash keys magit-git--config-cache :nil)))
    (when (eq val :nil)
      (setq val (puthash keys (apply fun keys) magit-git--config-cache)))
    val))

(advice-add 'magit-get :around #'memoize-git-config)
(advice-add 'magit-get-boolean :around #'memoize-git-config)

আপনি কেবল melpa.org/#/ স্মরণ প্যাকেজটি ব্যবহার করবেন না কেন ?
fommil

1
@fommil: আমি জন্য বাফার প্রতি Rev-পার্স memoize করা প্রয়োজন কিছু args। মেমোয়েজ প্যাকেজটিতে কার্সারি দেখার পরে আমি এটি করার কোনও উপায় দেখতে পেলাম না। এছাড়াও এটি বলে যে এটি স্মৃতিচারণ পরিচালনা করতে পারে না nil
npostavs
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.