ডিফল্টরূপে - বল-ইজারা সহ চাপুন


130

আমি সবেমাত্র শিখেছি git push --force-with-lease। এটা দুর্দান্ত। তবে অবশ্যই আমি প্রায়শই বল প্রয়োগ করি না এবং তাই আমি আশঙ্কা করছি যে পরের বার যখন প্রয়োজন হবে আমি এই নিফটির বৈশিষ্ট্যটি ভুলে যেতে পারি।

গিট কনফিগার করার কোনও উপায় কি তাই আমি যদি ইচ্ছাকৃতভাবে এটিকে ওভাররাইড না করি তবে git push -fস্বয়ংক্রিয়ভাবে ব্যবহার করবে ?--force-with-lease--no-force-with-lease

(ইজারা ছাড়াই বল প্রয়োগ করার ইচ্ছা আমি কখনই ভাবতে পারি না!)

উত্তর:


141

এএফআইকে গিটকে সর্বদা এর force-with-leaseপরিবর্তে ব্যবহার করতে বলার মতো কনফিগারেশন নেই force। এটি কোনও বৈশিষ্ট্যের অনুরোধের জন্য একটি ভাল উদাহরণ বলে মনে হচ্ছে; গিট কোড বেসটিতে ডুব দিতে যদি আপনার কোন সমস্যা না হয় তবে আপনি নিজে এটি প্রয়োগ করতে এবং পর্যালোচনার জন্য জমা দিতে পারেন।

সম্পাদনা যেমন এটি দাঁড়িয়েছে, 2019 সালের এপ্রিল মাসে এটি এখনও সত্য।

ততক্ষণ পর্যন্ত আমি কেবলমাত্র অপশনটি দেখি, প্রায়শই, এটি তৈরি করা aliasযা এই উদ্দেশ্যে কাজ করে।

একটি উপনাম তৈরি করুন

একটি উপনাম তৈরি করতে একটি ব্যবহার করবে git config --global alias.<alias-name> <command>, আমাদের ক্ষেত্রে আমি এর অনুরূপ কিছু প্রস্তাব করব।

git config --global alias.pushf "push --force-with-lease"

এটি আপনার গ্লোবাল .gitconfigফাইলে একটি এন্ট্রি তৈরি করবে (যা আপনি সাধারণত আপনার হোম ডিরেক্টরিতে খুঁজে পেতে পারেন )। এর পরে git pushfআপনি জোর করে-ইজারা দেওয়ার জন্য ব্যবহার করতে পারেন ।

আপনার হাত নোংরা করুন

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

আপনি অফিসিয়াল সম্প্রদায় পৃষ্ঠায় এই সমস্ত লিঙ্ক এবং আরও অনেক কিছু পেতে পারেন ।


25
এটি বৈশিষ্ট্য না হওয়ার বিষয়ে একটি নোট: স্ট্যান্ডার্ড কমান্ডগুলি ("ধাক্কা - বল") রাইটিংয়ের বিরুদ্ধে সাধারণ যুক্তি হ'ল আপনি তাদের অভ্যস্ত হয়ে যান, তাদের উত্স ভুলে যান এবং একদিন দুর্ঘটনাক্রমে নতুন সিস্টেমে সেভাবে সেগুলি ব্যবহার করুন। অনেকটা আপনার .bashrc এ এলিয়াস rmকরার মতো rm -i; আপনি ভুলে যাবেন এবং কোনও দিন কোনও সার্ভারে একটি গুরুত্বপূর্ণ ফাইল মুছবেন। আপনার নিজের ওরফে সাথে যেতে সমস্যা হয় না :)
hraban

2
ব্যক্তিগত উপাখ্যান / সতর্কতার শব্দ: আমি এটির সাথে এলিয়াস করার চেষ্টা করেছি pushfতবে সর্বদা ডাবল-চেক করেছিলাম যে আমি একটি করছিলাম না push -f, কারণ এটি উলের সাথে মিল রয়েছে। দলের কিছু সদস্য push -fযেভাবেই হোক ব্যবহার করছেন, ভেবেছিলেন যে উপনামটি এটির জন্য কেবল একটি প্রসাধনী শর্টহ্যান্ড। শেষ পর্যন্ত, আমরা এর pushflপরিবর্তে নিরাপদ ফর্মটি আলাদা করে রেখেছি এবং এটি নিয়ে চিন্তিত হওয়া বন্ধ করে দিয়েছি ।
ক্যালভিন

31

আমি উদ্বিগ্ন যে পরের বার যখন আমার প্রয়োজন হবে তখন আমি এই নিফটির বৈশিষ্ট্যটি ভুলে যেতে পারি।

Git 2.13 (Q2 এর 2017) ব্যাখ্যা দিয়েছে কেন সেখানে এই ধাক্কা বিকল্প বিরুদ্ধে কোনো "সুরক্ষা", বিস্মৃত হচ্ছে কারণ এমনকি যদি আপনি না এটা ভুলবেন git pushস্তর, এটা এখনও উপেক্ষিত হতে পারে।

Commitভর আরনফজুরি বজরমসন ( ) দ্বারা f17d642 (19 এপ্রিল 2017) কমিট দেখুন । (দ্বারা একীভূত junio সি Hamano - - মধ্যে কমিট 46bdfa3 26 এপ্রিল 2017)avar
gitster

push: --force-with-leaseএকাধিক রিমোটগুলির সাথে দস্তাবেজ এবং পরীক্ষা

একই URL টিতে দুটি রিমোট দেখানো মামলার জন্য দস্তাবেজ এবং পরীক্ষা, এবং একটি ব্যাকগ্রাউন্ড আনার এবং git push --force-with-leaseপরবর্তীগুলিতে ক্লোবারকে আপডেট করা উচিত নয় এমন আপডেট হওয়া উল্লেখগুলি পাওয়া যায় না।

মাইক্রোসফ্টের ভিএসসির মতো কিছু সম্পাদকের পটভূমিতে স্বয়ংক্রিয়ভাবে আনার বৈশিষ্ট্য রয়েছে, এটি --force-with-lease& র দ্বারা প্রদত্ত সুরক্ষাগুলি বাইপাস করে--force-with-lease=<refname> , যেমন এখানে যুক্ত করা ডকুমেন্টেশনে উল্লিখিত হয়েছে।

সুতরাং এখনকার ডকুমেন্টেশনেরgit push মধ্যে রয়েছে:

সুরক্ষার বিষয়ে সাধারণ নোট: প্রত্যাশিত মান ব্যতীত এই বিকল্পটি সরবরাহ করা, যেমন --force-with-leaseবা পটভূমিতে ধাক্কা দেওয়ার জন্য দূরবর্তীটিতে স্পষ্টভাবে --force-with-lease=<refname> চলমান যে কোনও কিছু দিয়ে খুব খারাপভাবে ইন্টারঅ্যাক্ট করে git fetch, যেমন git fetch originক্রোনজবগুলিতে আপনার সংগ্রহশালায়।

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

যদি আপনার সম্পাদক বা অন্য কোনও সিস্টেম git fetchআপনার জন্য ব্যাকগ্রাউন্ডে চলমান থাকে তবে এটি প্রশমিত করার উপায়টি কেবল অন্য একটি রিমোট সেটআপ করা:

git remote add origin-push $(git config remote.origin.url)
git fetch origin-push

এখন যখন পটভূমি প্রক্রিয়াটি চালিত হয় git fetch originতখন রেফারেন্সগুলি origin-pushআপডেট হবে না এবং এভাবে আদেশ দেয়:

git push --force-with-lease origin-push

ম্যানুয়ালি চালানো না হলে ব্যর্থ হবে git fetch origin-push
এই পদ্ধতিটি অবশ্যই চলমান কিছু দ্বারা সম্পূর্ণ পরাজিত git fetch --all, সে ক্ষেত্রে আপনাকে হয় এটি অক্ষম করতে হবে বা আরও ক্লান্তিকর কিছু করার দরকার আছে:

git fetch              # update 'master' from remote
git tag base master    # mark our base point
git rebase -i master   # rewrite some commits
git push --force-with-lease=master:base master:master

baseঅর্থাত্ প্রবাহিত কোডের সংস্করণগুলির জন্য একটি ট্যাগ তৈরি করুন যা আপনি দেখেছেন এবং ওভাররাইট করতে ইচ্ছুক, তারপরে ইতিহাস পুনরায় লিখুন এবং শেষ পর্যন্ত আপনার স্থানীয়টিতে যা আপডেট হয়েছে তা নির্বিশেষে masterরিমোট সংস্করণটি এখনও রয়েছে কিনা তাতে চাপ চাপ দিন পটভূমি।baseremotes/origin/master


30

আমার সমাধানটি ছিল একটি মোড়ক স্ক্রিপ্ট তৈরি করা এবং একটি উপনাম ব্যবহার করা যাতে আমি সর্বদা এটি বাস্তবের জায়গায় ব্যবহার করি git

আমি যখনই চেষ্টা করব git push -f, আমি নিম্নলিখিতগুলি দেখতে পাচ্ছি:

⚡ git push -f
use this instead so you don't cause race conditions in the 
repo: git push --force-with-lease

এই লিপির কিছু সুবিধা হ'ল:

  • এটি আমাকে অভ্যাসগতভাবে ব্যবহার করতে প্রশিক্ষণ দেয় --force-with-lease, তাই আমি যখন ভুল হয়ে যাই তখন আমি কড়া নাড়ি
  • যদি, কোনও কারণে, আমাদের সত্যিই জোর করে ধাক্কা দেওয়া দরকার, git push --forceকাজ করবে।

কীভাবে এটি প্রয়োগ করবেন:

  1. একটি কাস্টম স্ক্রিপ্ট তৈরি করুন যা গিটের জন্য কোনও প্যারামের মধ্য দিয়ে যাবে -f
  2. উপন্যাসটি স্ক্রিপ্ট যাতে আমরা এটির পরিবর্তে এটি ব্যবহার করি git

এই নির্দেশাবলী লিনাক্স বা ম্যাক ধরে নিয়েছে, চলমান বাশ। আমি zsh বা উইন্ডোজের সাহায্যে এটি চেষ্টা করি নি, তবে আমি ধরে নিয়েছি এটি সেখানেও কাজ করবে।

~/.bash_profile:

alias git=~/.git_wrapper.sh

~./git_wrapper.sh:

#!/bin/bash
for arg in "$@"; do
    if [ "$arg" = "push" ]; then
        ispush=1
    elif [ "$ispush" = 1 -a "$arg" = '-f' ]; then
        echo "use this instead so you don't cause race conflicts in the repo: git push --force-with-lease"
        exit 1
    fi
done

git "$@"

এই পরিবর্তনগুলির সাথে, আপনার টার্মিনালটি পুনরায় চালু করুন এবং gitআপনি যখন জোর চাপানোর চেষ্টা করবেন তখন এখন বড় হওয়া উচিত।


17
এটি সুবিধাজনক বলে মনে হচ্ছে। +1 টি। হতে পারে "আরে বোকা" "হেই, আপনি কোমল কিন্তু সাদামাটা আত্মা" বা এরকম কোনও কিছু দ্বারা প্রতিস্থাপন করুন;)
ভোনসি

5

OMYZSH ব্যবহারকারী লোকদের জন্য আপনি কেবল ব্যবহার করতে পারেন ggfl


3

আমি মনে করিয়ে দিতে চাই যে আমার ব্যবহার করা উচিত নয় -f, তবে আমি এর -fঅর্থ বিশ্বাস করে বোকা বানাতে চাই না --force-with-lease। সুতরাং এটি আমার গ্রহণ:

git() {
  if [[ $@ == 'push -f'* ]]; then
    echo Hey stupid, use --force-with-lease instead
  else
    command git "$@"
  fi
}

আপনার যুক্ত করুন .bash_profile, .bashrcবা .zshrc


1

আপনি একটি বাশ ফাংশন তৈরি করতে পারেন যা পরিবর্তে পরিবর্তে gitব্যবহার --force-with-leaseকরে use--force

# replaces `git push --force` with `git push --force-with-lease`
git() {
  if [[ $@ == 'push -f'* || $@ == 'push --force'* ]]; then
    command git push --force-with-lease
  else
    command git "$@"
  fi
}

বা, এক লাইনে:

git() { if [[ $@ == 'push -f'* || $@ == 'push --force'* ]]; then command git push --force-with-lease; else command git "$@"; fi; }

শুধু এটি আপনার ~/.bashrcবা যুক্ত করুন ~/.zshrc

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.