2015-06-21 4 views
5

मैं एक पुराने सीवीएस भंडार को गिट में परिवर्तित कर रहा हूं, जिसने सभी कामों को छोड़कर बहुत अच्छा काम किया है, प्रत्येक लेखक के स्थानीय टाइमज़ोन की बजाय यूटीसी में हैं।गिट इतिहास में सभी कामों के लिए टाइमज़ोन बदलें

मैं प्रति-लेखक आधार पर इन प्रतिबद्धताओं का टाइमज़ोन बदलना चाहता हूं, उदाहरण के लिए सभी एक लेखक से +0000 से +1000 तक बदलते हैं, जबकि अन्य लेखकों से काम करता है अपरिवर्तित होते हैं। (इसलिए मैं प्रत्येक लेखक के लिए एक बार यह प्रक्रिया कर सकता हूं।)

समय में वास्तविक क्षण एक ही रहना चाहिए, इसलिए वर्तमान में 02:00:00 +0000 एक प्रतिबद्धता 12:00:00 +1000 बननी चाहिए।

क्या यह git filter-branch जैसे कुछ के साथ संभव है?

+1

यह न भूलें कि "समय क्षेत्र! = ऑफ़सेट" (देखें [टाइमज़ोन टैग विकी] (http://stackoverflow.com/tags/timezone/info))। डीएसटी के आधार पर ऑफ़सेट एक लेखक के लिए भिन्न हो सकता है। –

+0

संबंधित: http: // stackoverflow।कॉम/ए/23 9 00181/634824 –

उत्तर

1

मैं इस के साथ आ गए हैं, जो चाल करने के लिए लगता है:

git filter-branch --env-filter ' 
    if [ "$GIT_AUTHOR_EMAIL" == "[email protected]" ]; then 
     export GIT_AUTHOR_DATE=`echo $GIT_AUTHOR_DATE | sed s/+0000/+1000/` 
    fi 
    if [ "$GIT_COMMITTER_EMAIL" == "[email protected]" ]; then 
     export GIT_COMMITTER_DATE=`echo $GIT_COMMITTER_DATE | sed s/+0000/+1000/` 
    fi' 

यह +0000 से +1000 लेखक [email protected] के लिए समय क्षेत्र बदल जाता है। यदि किसी दिए गए प्रतिबद्धता में टाइमज़ोन पहले से ही कुछ और है तो इसे अपरिवर्तित छोड़ दिया जाएगा। अगर यह व्यक्ति लेखक था लेकिन कमिटर (या इसके विपरीत) नहीं, तो उनकी भूमिका के लिए केवल तारीख अपडेट की जाएगी।

यह डीटीएस के कारण बदलते यूटीसी ऑफ़सेट को संभाल नहीं पाएगा क्योंकि @ मैट जॉनसन ने बताया, लेकिन यदि आवश्यक हो तो आप इसके लिए अतिरिक्त मानदंड जोड़ सकते हैं।

यह गिट के आंतरिक दिनांक प्रारूप का लाभ उठाकर काम करता है, जिसे युग के बाद से सेकंड में हमेशा मापा जाता है और @12345 +0000 जैसा दिखता है। यहां टाइमज़ोन का उपयोग नहीं किया जाता है (सेकेंड की संख्या हमेशा यूटीसी में होती है) जो आपको संदर्भित समय में प्रभावी पल बदलने के बिना टाइमज़ोन को बदलने की अनुमति देती है। यहां यूटीसी ऑफसेट को बदलना केवल तारीख के डिफ़ॉल्ट स्वरूपण को प्रभावित करता है।

2

@Malvineous 'जवाब के अलावा:

यदि यह एक संदर्भ के रूप में वर्तमान उपयोगकर्ता के समय क्षेत्र का उपयोग करने के ठीक है, आप डीएसटी रूपांतरण करने के लिए Git का उपयोग कर सकते हैं। यह मेरे लिए चाल है, डीएसटी परिवर्तन सहित, वर्तमान समय क्षेत्र में सभी कामों के समय क्षेत्र को ठीक करता है।

git filter-branch --env-filter ' 
    if [ "$GIT_AUTHOR_EMAIL" == "[email protected]" ]; then 
    GIT_AUTHOR_DATE=`echo $GIT_AUTHOR_DATE|sed -e "s/[+-][0-9]\{4\}//g"` 
    fi 
    if [ "$GIT_COMMITTER_EMAIL" == "[email protected]" ]; then 
    GIT_COMMITTER_DATE=`echo $GIT_COMMITTER_DATE|sed -e "s/[+-][0-9]\{4\}//g"` 
    fi 
' 

sed लाइन टाइमज़ोन से स्ट्रिप्स बंद हो जाती है। जीआईटी बाकी का ख्याल रखता है।

कृपया ध्यान दें कि यह प्रारंभिक रूप से अनुरोध किए गए एक स्पष्ट टाइमज़ोन का समर्थन नहीं करता है, लेकिन डीएसटी का ख्याल रखता है।

नोट: मूल जवाब date का उपयोग कर, उदाहरण के लिए,

GIT_AUTHOR_DATE=`date --date=$GIT_AUTHOR_DATE` 

बहरहाल, यह आवश्यक नहीं है क्योंकि हैंडल (डीएसटी सहित) भी निर्दिष्ट न हो वर्तमान समय क्षेत्र का उपयोग करता है एक अतिरिक्त लाइनों था। इसलिए, टाइमज़ोन काटना पर्याप्त है।

+0

सुनिश्चित नहीं है कि "डीएसटी रूपांतरण" का क्या अर्थ है, लेकिन जब मैंने इसे सर्दियों में टीजेड = यूरोप/लंदन के साथ चलाया तो यह हर समय यूटीसी (+0000) में परिवर्तित हो गया और तथ्य को संभाला नहीं कि कुछ काम पिछले गर्मियों में थे जब लंदन ब्रिटिश ग्रीष्मकालीन समय का उपयोग कर रहा था। (मैं एक रिपोजिटरी को हल करने का प्रयास कर रहा हूं जिसे मैं अमेरिका में एक सर्वर से कर रहा हूं जो यूएस टाइम जोन पर सेट किया गया था और मैं अपने स्थानीय ब्रिटिश समय को प्रतिबद्धता पर दर्ज करूँगा।) –

संबंधित मुद्दे