গিট কীভাবে কোনও ত্রুটি ছাড়াই কমিট করবেন?


91

আমি একটি ফ্যাব্রিক স্ক্রিপ্ট লিখতে চেষ্টা করছি যা একটি করে git commit; যাইহোক, যদি প্রতিশ্রুতিবদ্ধ কিছু না হয়, গিট একটি স্ট্যাটাস সহ প্রস্থান করে 1। ডিপ্লয় স্ক্রিপ্ট এটিকে ব্যর্থ হিসাবে গ্রহণ করে এবং প্রস্থান করে। আমি সনাক্ত করতে চাও প্রকৃত , ব্যর্থতা-টু কমিট তাই আমি ঠিক ফ্যাব্রিক একটি কম্বল জন্য উপেক্ষা দিতে পারবে না git commitব্যর্থতা। আমি কীভাবে শূন্য-প্রতিশ্রুতি ব্যর্থতাগুলিকে অগ্রাহ্য করার অনুমতি দেব যাতে স্থাপনা অব্যাহত রাখতে পারে তবে সত্যিকারের প্রতিশ্রুতি ব্যর্থ হলে তবুও ত্রুটিগুলি ধরা যায়?

def commit():
    local("git add -p && git commit")

উত্তর:


154

এই শর্তটি আগেই গিট ডিফের বহির্গমন কোডটি পরীক্ষা করে দেখুন?

উদাহরণস্বরূপ (শেলের মধ্যে):

git add -A
git diff-index --quiet HEAD || git commit -m 'bla'

সম্পাদনা: git diffহোলারের মন্তব্য অনুসারে স্থির কমান্ড।


64
দ্রষ্টব্য যে git diffএকটি "চীনামাটির বাসন" কমান্ড যা স্ক্রিপ্টিংয়ের জন্য ব্যবহার করা উচিত নয়। আপনি সম্ভবত যা চান তা হ'ল git diff-index --quiet HEAD || git commit -m 'bla'। আরও দেখুন এই উত্তর
হলগার

4
জিনিসগুলি আরও ব্যাখ্যা করার জন্য, সমস্যাটি git diff --quiet --exit-code --cachedহ'ল এটি 1কেবলমাত্র পরিবর্তিত ফাইলগুলির জন্য (মিথ্যা) মূল্যায়ন করবে যা প্রতিশ্রুতিবদ্ধকরণের জন্য বিনীত হয়নি (আনডাডড ফাইলগুলি)। আপ-ভোট দেওয়া মন্তব্যটি নতুন ফাইল এবং মুছে ফেলার জন্য অ্যাকাউন্টের সেরা সমাধান।
জর্জে বুকারান

4
সম্পর্কে মন্তব্যটি git diff-index --quiet HEAD || git commit -m 'bla'এই প্রশ্নের উত্তর হওয়া উচিত।
রাকিব

4
যেহেতু টবি হোলারের মন্তব্য অনুসারে তার উত্তর ঠিক করতে পাত্তা দিলেন না, তাই আমি তার উত্তরটি নিজেই সম্পাদনা করেছি।
vog

নোট করুন যে গিট ডিফ-ইনডেক্স - কুইট হেড পরীক্ষা করে না যদি স্থানীয় সংগ্রহস্থলটি উত্সটির সাথে আপ-টু-ডেট থাকে।
বোর্টজমায়ার

62

থেকে git commitমানুষ পৃষ্ঠা:

--allow-empty
    Usually recording a commit that has the exact same tree as its
    sole parent commit is a mistake, and the command prevents you
    from making such a commit. This option bypassesthe safety, and
    is primarily for use by foreign SCM interface scripts.

41
এটি আসলে যদিও একটি প্রতিশ্রুতি তৈরি করবে।
চোরমাস্টার

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

4
আমি এড়াতে পারলে প্রতিশ্রুতি না দেওয়া পছন্দ করি prefer এটা করার কোন উপায় আছে?
কোজিরো

4
এটি প্রশ্নের উত্তর নয়
manojlds

7
@ মানোজাল্ডস: "অবশ্যই ওপি একটি খালি প্রতিশ্রুতি তৈরি করতে চায় না।" আমি আজ আমার স্ফটিক বল বাড়িতে রেখেছি, তাই আমি জানতাম না। তবে মিস করেছেন -p, তবে এখনও
সোভেন মার্নাচ

5
with settings(warn_only=True):
  run('git commit ...')

এর ফলে ফ্যাব্রিক ব্যর্থতা উপেক্ষা করে। খালি কমিট না তৈরি করার সুবিধা রয়েছে।

with hide('warnings'):আউটপুট পুরোপুরি দমন করার জন্য আপনি এটি একটি অতিরিক্ত স্তরে মুড়িয়ে রাখতে পারেন , অন্যথায় আপনি ফ্যাব্রিক আউটপুটে একটি নোট পাবেন যা প্রতিশ্রুতিবদ্ধভাবে ব্যর্থ হয়েছে (তবে ফ্যাবফিল চালিয়ে যেতে পারে)।


4
ওপি লিখেছেন "আমি বাস্তব ব্যর্থতা-প্রতিশ্রুতি সনাক্ত করতে চাই "; এই কোডটি সমস্ত ব্যর্থতা-প্রতিশ্রুতি গোপন করবে ।
bfontaine

-2

চেষ্টা / ধর বাচ্চা!

from fabric.api import local
from fabric.colors import green


def commit(message='updates'):
    try:
        local('git add .')
        local('git commit -m "' + message + '"')
        local('git push')
        print(green('Committed and pushed to git.', bold=False))
    except:
        print(green('Done committing, likely nothing new to commit.', bold=False))

10
কেন আপনি নিম্নচালিত হন তা ব্যাখ্যা করার জন্য: অন্যান্য ত্রুটি থাকতে পারে যা আপনি ধরতে চান। আপনি কেবল ধরে নিতে চান না যে কোনও ত্রুটির ক্ষেত্রে, এটি হতে পারে যে কোনও কিছুই প্রতিশ্রুতিবদ্ধ হতে হবে না। - এছাড়াও, তবে এটি সম্পর্কিত নয়: এর পরিবর্তে কখনও জেনেরিক except:, ব্যবহার except Exceptionবা অন্যান্য ব্যবহার করবেন না।
অ্যালবার্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.