प्रतिबद्धताओं की पहचान करने का परिचय
कुछ महीने पहले, मैंने अपने प्रोग्राम में जिस प्रोजेक्ट का उपयोग कर रहा हूं, उसके लिए GitHub रिपॉजिटरी पर एक पुल अनुरोध किया था। मैं इस पीआर के साथ काम कर रहा हूं और अब ऐसा लगता है कि आगे बढ़ने का सबसे आसान तरीका इसे साफ-सुथरा तरीके से दोबारा बनाना है।
ऐसा करने के लिए, मुझे स्थानीय रेपो पर git diff चलाने के लिए एक कमिट ढूँढने की ज़रूरत है जिससे मैंने शुरुआत की थी। क्या ज्ञात एसएचए से कुछ महीने पहले प्रतिबद्ध एसएचए ढूंढने का कोई आसान तरीका है? या क्या मुझे गिट लॉग चलाना होगा और जब तक मैं वह प्रतिबद्धता नहीं देख लेता, जिसके साथ मैंने शुरुआत की थी, तब तक इसका दृश्य रूप से निरीक्षण करना होगा?
आज्ञा | विवरण |
---|---|
git rev-list | कमिट ऑब्जेक्ट को उल्टे कालानुक्रमिक क्रम में सूचीबद्ध करता है, जिसका उपयोग किसी विशिष्ट तिथि से पहले कमिट का SHA खोजने के लिए किया जाता है। |
git rev-parse | एक संशोधन को पार्स करता है (उदाहरण के लिए, शाखा का नाम या प्रतिबद्ध SHA) और संबंधित SHA-1 मान को आउटपुट करता है। |
requests.get | निर्दिष्ट URL के लिए GET अनुरोध करता है, जिसका उपयोग GitHub API से कमिट प्राप्त करने के लिए Python स्क्रिप्ट में किया जाता है। |
datetime.timedelta | एक अवधि का प्रतिनिधित्व करता है, दो तिथियों या समय के बीच का अंतर, जिसका उपयोग दो महीने पहले की तारीख की गणना करने के लिए किया जाता है। |
datetime.isoformat | आईएसओ 8601 प्रारूप में तारीख का प्रतिनिधित्व करने वाली एक स्ट्रिंग लौटाता है, जो एपीआई प्रश्नों में उपयोग के लिए उपयुक्त है। |
git log --since | एक निर्दिष्ट तिथि के बाद से कमिट लॉग दिखाता है, जिसका उपयोग दो महीने पहले से कमिट SHA को मैन्युअल रूप से खोजने के लिए किया जाता है। |
स्क्रिप्ट उपयोग की विस्तृत व्याख्या
पहली स्क्रिप्ट एक बैश स्क्रिप्ट है जिसे दो महीने पहले की कमिट के SHA को खोजने और पुल अनुरोध के लिए एक अंतर उत्पन्न करने के लिए डिज़ाइन किया गया है। यह कमांड का उपयोग करता है git rev-list प्रतिबद्ध वस्तुओं को उल्टे कालानुक्रमिक क्रम में सूचीबद्ध करने के लिए, और फिर निर्दिष्ट तिथि से पहले पहली प्रतिबद्धता ढूँढता है। date कमांड का उपयोग दो महीने पहले की तारीख की गणना करने के लिए किया जाता है, और git rev-parse शाखा पर नवीनतम प्रतिबद्धता का SHA प्राप्त करने के लिए उपयोग किया जाता है। अंत में, git diff इन दोनों प्रतिबद्धताओं के बीच अंतर उत्पन्न करता है।
दूसरी स्क्रिप्ट एक पायथन स्क्रिप्ट है जो रिपॉजिटरी से कमिट लाने के लिए GitHub API के साथ इंटरैक्ट करती है। इसका उपयोग करता है requests.get GitHub पर एक एपीआई कॉल करने के लिए फ़ंक्शन, दो महीने पहले गणना की गई तारीख के बाद से कमिट पुनर्प्राप्त करना datetime.timedelta. पुनर्प्राप्त JSON डेटा को सबसे पुराने और नवीनतम कमिट खोजने के लिए पार्स किया जाता है, और उनके SHA मुद्रित किए जाते हैं। यह स्क्रिप्ट इसका लाभ उठाती है datetime.isoformat एपीआई अनुरोध के लिए तारीख को सही ढंग से प्रारूपित करने की विधि।
सही अंतर खोजने के लिए Git कमांड का उपयोग करना
गिट और बैश स्क्रिप्ट
#!/bin/bash
# Find the commit SHA from two months ago
# and get the diff for a pull request
COMMIT_DATE=$(date -d "2 months ago" '+%Y-%m-%d')
START_COMMIT=$(git rev-list -n 1 --before="$COMMIT_DATE" main)
# Replace 'main' with the appropriate branch if necessary
END_COMMIT=$(git rev-parse HEAD)
echo "Start commit: $START_COMMIT"
echo "End commit: $END_COMMIT"
git diff $START_COMMIT $END_COMMIT > pr_diff.patch
GitHub API से कमिट प्राप्त करना
GitHub API का उपयोग करके पायथन स्क्रिप्ट
import requests
import datetime
# Set up your GitHub token and repo details
GITHUB_TOKEN = 'your_github_token'
REPO_OWNER = 'repo_owner'
REPO_NAME = 'repo_name'
# Calculate the date two months ago
two_months_ago = datetime.datetime.now() - datetime.timedelta(days=60)
headers = {'Authorization': f'token {GITHUB_TOKEN}'}
url = f'https://api.github.com/repos/{REPO_OWNER}/{REPO_NAME}/commits?since={two_months_ago.isoformat()}'
response = requests.get(url, headers=headers)
commits = response.json()
if commits:
start_commit = commits[-1]['sha']
end_commit = commits[0]['sha']
print(f"Start commit: {start_commit}")
print(f"End commit: {end_commit}")
Git लॉग के साथ कमिट SHA प्राप्त करना
मैनुअल गिट कमांड लाइन
# Open your terminal and navigate to the local repository
cd /path/to/your/repo
# Run git log and search for the commit SHA
git log --since="2 months ago" --pretty=format:"%h %ad %s" --date=short
# Note the commit SHA that you need
START_COMMIT=<your_start_commit_sha>
END_COMMIT=$(git rev-parse HEAD)
# Get the diff for the pull request
git diff $START_COMMIT $END_COMMIT > pr_diff.patch
सटीक अंतर के लिए प्रतिबद्ध इतिहास पर दोबारा गौर करना
पुल अनुरोधों और प्रतिबद्ध इतिहास को प्रबंधित करने का एक अन्य आवश्यक पहलू यह समझना है कि Git की शक्तिशाली रीफ्लॉग सुविधा का उपयोग कैसे किया जाए। रिफ्लॉग शाखाओं की नोक और अन्य संदर्भों के अपडेट को रिकॉर्ड करता है, जिससे आप शाखाओं के ऐतिहासिक आंदोलनों को देख सकते हैं और पिछले प्रतिबद्ध पदों का पता लगा सकते हैं, भले ही वे अब शाखा इतिहास के माध्यम से पहुंच योग्य न हों। यह विशेष रूप से उपयोगी हो सकता है यदि आपको कई महीनों पहले से प्रतिबद्ध एसएचए ढूंढने की आवश्यकता है लेकिन आपके पास कोई विशिष्ट तिथि नहीं है।
चलाकर git reflog कमांड, आप शाखा के प्रमुख में परिवर्तनों का लॉग देख सकते हैं, जिसमें रीसेट, रिबेस और मर्ज शामिल हैं। यह लॉग आपके द्वारा शुरू की गई प्रतिबद्धता के SHA को पहचानने में मदद कर सकता है। इस पद्धति का उपयोग करके, आप सटीक प्रतिबद्धता को इंगित करने के लिए रीफ्लॉग प्रविष्टियों के माध्यम से नेविगेट कर सकते हैं, जिसका उपयोग आपके पुल अनुरोध के लिए एक सटीक अंतर उत्पन्न करने के लिए किया जा सकता है।
गिट पुल अनुरोधों को प्रबंधित करने के लिए सामान्य प्रश्न और समाधान
- मैं महीनों पहले का एक विशिष्ट प्रतिबद्ध SHA कैसे पा सकता हूँ?
- उपयोग git rev-list दिनांक फ़िल्टर के साथ या git reflog प्रतिबद्ध SHA का पता लगाने के लिए आदेश।
- दो प्रतिबद्धताओं के बीच अंतर उत्पन्न करने का सबसे अच्छा तरीका क्या है?
- उपयोग git diff दो कमिटों के SHAs के साथ कमांड।
- मैं GitHub API का उपयोग करके एक विशिष्ट समय सीमा से कमिट कैसे प्राप्त करूं?
- स्वरूपित दिनांक पैरामीटर के साथ GitHub API का उपयोग करें datetime.isoformat पायथन में.
- का उद्देश्य क्या है git rev-parse आज्ञा?
- यह शाखा नामों या प्रतिबद्ध संदर्भों को SHA-1 हैश मानों में परिवर्तित करता है।
- मैं प्रतिबद्ध लॉग का मैन्युअल रूप से निरीक्षण कैसे कर सकता हूं?
- दौड़ना git log जैसे उपयुक्त फिल्टर के साथ --since प्रतिबद्ध इतिहास देखने के लिए.
- क्या मैं प्रतिबद्ध एसएचए खोजने की प्रक्रिया को स्वचालित कर सकता हूँ?
- हाँ, प्रतिबद्ध जानकारी को लाने और संसाधित करने को स्वचालित करने के लिए बैश या पायथन जैसी स्क्रिप्ट का उपयोग करना।
- कैसे हुआ datetime.timedelta स्क्रिप्टिंग में मदद?
- यह तिथि अंतर की गणना करता है, जो वर्तमान तिथि के सापेक्ष तिथियां निर्धारित करने के लिए उपयोगी है।
- क्या करता है requests.get पायथन में फ़ंक्शन क्या है?
- यह GitHub जैसे API से डेटा पुनर्प्राप्त करने के लिए HTTP GET अनुरोध करता है।
- मैं किसी भिन्न आउटपुट को किसी फ़ाइल में कैसे सहेज सकता हूँ?
- के आउटपुट को पुनर्निर्देशित करें git diff to a file using the > आपके आदेश में > ऑपरेटर का उपयोग करके फ़ाइल में।
पुल अनुरोधों के लिए कठिनाइयाँ उत्पन्न करने पर अंतिम विचार
क्लीन पुल अनुरोध को दोबारा बनाने में अतीत से सही प्रतिबद्ध SHA की पहचान करना शामिल है। जैसे तरीकों का उपयोग करना git rev-list और git log, या GitHub API के साथ इंटरैक्ट करने वाली स्क्रिप्ट का लाभ उठाकर, इस प्रक्रिया को सुव्यवस्थित किया जा सकता है। प्रतिबद्ध SHAs की पुनर्प्राप्ति को स्वचालित करके और अंतर उत्पन्न करके, आप समय बचा सकते हैं और सटीकता सुनिश्चित कर सकते हैं। ये तकनीकें स्वच्छ और संगठित कोडबेस बनाए रखने, सहज सहयोग और परियोजना प्रबंधन की सुविधा के लिए अमूल्य हैं।