গিট আনতে বা টান দিয়ে স্বয়ংক্রিয় ছাঁটাই


248

যদি কাজটি শেষ হয়ে যায় এবং আমি জানি না যে কেউ যদি একটি রিমোট শাখা git fetch --pruneমুছে ফেলে তবে আমি একটি করব না এবং শেষ পর্যন্ত আমি মুছে ফেলা শাখাটি পিছনে ফেলে দেব।

প্রতিবার নির্দিষ্ট করে না রেখে গিটকে প্রিন মোডটি ব্যবহার করতে বাধ্য করার জন্য কি কোনও কার্যকর সমাধান রয়েছে?


1
আপনি শীঘ্রই (গিট 1.8.5, কিউ 4 2013) আপনি সর্বদা ছাঁটাই করতে চান এমন একটি রেপোর স্থানীয় কনফিগারেশনে নির্দিষ্ট করতে সক্ষম হবেন git fetch! দেখুন নিচের আমার উত্তর
VonC

উত্তর:


395

গিট 1.8.5 (Q4 2013) থেকে :

" git fetch" ( git pullপাশাপাশি " " পাশাপাশি) " fetch.prune" এবং " remote.*.prune" কনফিগারেশন ভেরিয়েবলগুলি পরীক্ষা করতে এবং " --prune" কমান্ড লাইন বিকল্পটি দেওয়া হয়েছে এমনভাবে আচরণ করতে শিখেছে ।

এর অর্থ হ'ল, যদি আপনি রিমোট.অরগিন সেট করেন।

git config remote.origin.prune true

যে কোনও git fetchবা git pullস্বয়ংক্রিয়ভাবে ছাঁটাই করা হবে।

দ্রষ্টব্য: গিট 2.12 (Q1 2017) এই কনফিগারেশন সম্পর্কিত একটি বাগ সংশোধন করবে, যা git remote renameখারাপ ব্যবহার করবে।
" আমি গিট রিমোটের কীভাবে নাম পরিবর্তন করব? " দেখুন।


কমিট 737c5a9 এ আরও দেখুন :

" git fetch --prune" ছাড়াই , অন্য শাখার জন্য ইতিমধ্যে সরানো একটি শাখার জন্য রিমোট-ট্র্যাকিং শাখাগুলি চিরকাল থাকবে।
কিছু লোক সর্বদা " git fetch --prune" চালাতে চায় ।

যে ব্যবহারকারীরা সর্বদা ছাঁটাই করতে চান বা নির্দিষ্ট দূরবর্তী থেকে আনতে চান তাদের জন্য, " fetch.prune" এবং " remote.<name>.prune" দুটি নতুন কনফিগারেশন ভেরিয়েবল যুক্ত করুন :

  • সমস্ত " fetch.prune" আনয়ন ক্রিয়াকলাপের জন্য ছাঁটাই সক্ষম করার অনুমতি দেয়।
  • " remote.<name>.prune" প্রতি প্রত্যন্ত আচরণ পরিবর্তন করতে দেয়।

পরেরটি প্রাকৃতিকভাবে পূর্ববর্তীকে ওভাররাইড করবে এবং --[no-]pruneকমান্ড লাইন থেকে বিকল্পটি কনফিগার করা ডিফল্টকে ওভাররাইড করবে।

যেহেতু --pruneএকটি সম্ভাব্য ধ্বংসাত্মক অপারেশন (গিটটি এখনও মুছে ফেলা রেফারেন্সগুলির জন্য পুনরায় ব্লগ রাখে না), আমরা ব্যবহারকারীদের সম্মতি ছাড়াই ছাঁটাই করতে চাই না, তাই এই কনফিগারেশনটি ডিফল্টরূপে চালু হবে না।


4
এই প্রকৃতপক্ষে এখন মুক্তি Git 1.8.5 মধ্যে অন্তর্ভুক্ত করা হয়
Bessey

1
আমি আমার সমস্ত গিট রিপোসে ডিফল্টরূপে এই আচরণটি করতে চাই। এমন কিছু করার জন্য আমি আমার .gitconfig এ এটি রাখতে পারি এমন কিছু আছে কি?
অ্যান্ড্রু

47
@ অ্যান্ড্রু একটি ভাল শুরু হবেgit config --global fetch.prune true
ভোনসি

1
সর্বদা টানতে ছাঁটাই করার সম্ভাব্য ডাউনসাইডগুলি কী কী? উক্তিটি উল্লেখ করেছে যে রিফ্লগের ইতিহাস প্রভাবিত হয় ... তবে এর ফলে কোন ব্যবহারিক সমস্যা দেখা দিতে পারে?
গ্রাফো

3
কোনো সত্যিকারের downside হয় @Grapho কিন্তু ... এ আরো দেখুন stackoverflow.com/a/39862779/6309
VonC

142

git config --global fetch.prune true

আপনার সমস্ত গিট সংগ্রহস্থলের --pruneজন্য git fetchএবং সর্বদা এটির জন্য git pull:

git config --global fetch.prune true

এই উপরের কমান্ডটি আপনার বৈশ্বিক গিট কনফিগারেশন (সাধারণত ~/.gitconfig) নিম্নলিখিত লাইনগুলিতে সংযোজন করে। git config -e --globalআপনার বিশ্বব্যাপী কনফিগারেশন দেখতে ব্যবহার করুন ।

[fetch]
    prune = true

git config remote.origin.prune true

সর্বদা --pruneতবে একক সংগ্রহস্থল থেকে:

git config remote.origin.prune true
                 #^^^^^^
                 #replace with your repo name

এই উপরের কমান্ডটি আপনার স্থানীয় গিট কনফিগারেশনে (সাধারণত .git/config) নীচের শেষ লাইনের সাথে যুক্ত হয়েছে। git config -eআপনার স্থানীয় কনফিগারেশন দেখতে ব্যবহার করুন ।

[remote "origin"]
    url = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    fetch = +refs/heads/*:refs/remotes/origin/*
    prune = true

আপনি --globalদ্বিতীয় কমান্ডের মধ্যেও ব্যবহার করতে পারেন বা এর পরিবর্তে --localপ্রথম কমান্ডের মধ্যে ব্যবহার করতে পারেন ।


git config --global gui.pruneDuringFetch true

আপনি যদি ব্যবহার করেন তবে আপনার আগ্রহীও git guiহতে পারে:

git config --global gui.pruneDuringFetch true

যে সংযোজন:

[gui]
    pruneDuringFetch = true

তথ্যসূত্র

সম্পর্কিত নথিগুলি থেকে git help config:

--global

  লেখার বিকল্পগুলির জন্য: ~/.gitconfigসংগ্রহস্থলের পরিবর্তে গ্লোবাল ফাইলে .git/configলিখুন, $XDG_CONFIG_HOME/git/configফাইলটি লিখুন যদি এই ফাইলটি উপস্থিত থাকে এবং ~/.gitconfigফাইলটি না থাকে।

 

--local

  লেখার বিকল্পগুলির জন্য: সংগ্রহস্থল .git/configফাইলটিতে লিখুন। এটাই স্বাভাবিক ব্যবহার।

 

fetch.prune

  যদি সত্য হয়, আনুন স্বয়ংক্রিয়ভাবে আচরণ করবে --pruneযেন কমান্ড লাইনে বিকল্পটি দেওয়া হয়েছিল। এছাড়াও দেখুন remote.<name>.prune

 

gui.pruneDuringFetch

  "সত্য" যদি গিট-গুই আনার সময় সঞ্চালনের সময় দূরবর্তী ট্র্যাকিং শাখাগুলি ছাঁটাই করে। ডিফল্ট মান মিথ্যা".

 

remote.<name>.prune

  সত্য হিসাবে সেট করা থাকলে, ডিফল্টরূপে এই রিমোট থেকে আনার ফলে রিমোটে থাকা কোনও রিমোট-ট্র্যাকিং রেফারেন্সও সরিয়ে দেওয়া হবে (যেমন --pruneকমান্ড লাইনে বিকল্পটি দেওয়া হয়েছিল)। ওভাররাইড fetch.pruneসেটিংস, যদি থাকে।


1
পার্শ্ব দ্রষ্টব্য: আমি এই পোস্টটি সম্পর্কে git config -eএবং সবেমাত্র শিখেছি git config -e --globalvimগিট কনফিগারেশন ফাইলের জন্য নির্দিষ্ট পাথের দিকে নির্দেশ করার জন্য আর টাইপিং কমান্ড নেই এবং সেই নির্দিষ্ট পাথটি কী তা নিয়ে ভাবতে হবে।
ইকবরোডি

1
এখন এটি একটি উত্তর যা আপনি কাজ করতে পারেন। আপনাকে অনেক ধন্যবাদ.
sebingel

এই উত্তরটি বেশ পুঙ্খানুপুঙ্খ, তবে এটির ফর্ম্যাটের কারণে খুব কঠিন। আমি "সর্বদা আপনার গিট সংগ্রহস্থলগুলিতে গিট আনার জন্য এবং গিট টানার জন্য সর্বজনীন প্রার্থনা খুঁজে পেয়েছি: git config --global fetch.prune true" ঠিক তেমন ভাল (প্রাসঙ্গিক ডক্সের একটি লিঙ্ক সহ)।
থাইবাউড কোলাস

19

আপনি pruneযখন সবসময় চান তবে fetchআমি এলিয়াস ব্যবহার করার পরামর্শ দিতে পারি ।

git config -eআপনার সম্পাদকটি খোলার জন্য নির্দিষ্ট টাইপ করুন এবং একটি নির্দিষ্ট প্রকল্পের জন্য কনফিগারেশন পরিবর্তন করুন এবং এর মতো একটি বিভাগ যুক্ত করুন

[alias]
pfetch = fetch --prune   

আপনি যখন git pfetchছাঁটাইটি পাবেন তখন স্বয়ংক্রিয়ভাবে সম্পন্ন হবে।


আমি বুঝেছি. যাইহোক, টান দিয়ে গিট আনতে হবে এবং গিট পিফেট ব্যবহার করবে না ... টান দেওয়ার জন্য আমার কি সরাসরি কোনও নাম থাকতে হবে?
এডমন্ডো 1984

1
আমি করব. এইভাবে আপনার কাছে উভয় বিকল্প রয়েছে, সাধারণ pullএবং fetchএবং তাদের ছাঁটাই করা সংস্করণ। প্রকৃতপক্ষে, আমি মনে করি (তবে আমি চেষ্টা করে দেখিনি) আপনি fetch = fetch --pruneসরাসরি ওরফে বিভাগে লিখতে পারেন এবং তাই pull
ছাঁটাই করা

2
যতদূর আমি জানি fetch = fetch --pruneকাজ করে না, একটি উলামের সাহায্যে আদেশটি ওভাররাইট করা আমার পক্ষে কাজ করে না। এটি হতে পারে কারণ আমি একটি পুরানো সংস্করণ (1.7.2.5) ব্যবহার করছি
ইউপকো

3
গিট কনফিগারেশন ডকুমেন্টেশন থেকে: "স্ক্রিপ্ট ব্যবহারের সাথে বিভ্রান্তি ও ঝামেলা এড়াতে, বিদ্যমান গিট কমান্ডগুলি আড়াল করে দেওয়া উপকরণগুলি উপেক্ষা করা হবে।"
দেওয়েন ক্রিস্টেনসেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.