दिलचस्प पोस्ट
स्थिर बनाम वैश्विक बाश में कौन सा अक्षरों को बचाना होगा? हम इसे कैसे जानते हैं? UIImage और Base64 स्ट्रिंग के बीच कन्वर्ट करें कमांड प्रॉम्प्ट से कई वर्गपथ पुस्तकालयों के साथ जार फ़ाइल निष्पादित करें एक निर्माता हस्ताक्षर परिभाषित इंटरफ़ेस? एनएसटीपीएन में पार्स प्लिस्ट (एनएसएसटीइंग) अगर-कम प्रोग्रामिंग (मूलतः सशर्त के बिना) उपप्रोसेस: विंडोज में बाल प्रक्रियाएं हटाना जेएक्स-आरएस और जर्सी के साथ तात्कालिक टोकन-आधारित प्रमाणीकरण के लिए सर्वश्रेष्ठ अभ्यास कैसे jQuery में XML फाइल सामग्री को पढ़ने के लिए और HTML तत्वों में प्रदर्शित? ट्यूप्ले को खोलने के लिए अजगर का रास्ता क्या है? URL खंड और 302 रीडायरेक्ट्स PHP के साथ मेल भेजते समय "माध्यम" और सर्वर नाम को कैसे निकालना है? बूस्ट के साथ INI फ़ाइल को पार्स करने के लिए कैसे करें नामांकित तर्कों में अंडरस्कोर

जीआईटी ऑटो-कमिट बनाना

मैं किसी फ़ाइल में सभी परिवर्तन रिकॉर्ड करने के लिए git का उपयोग करना चाहता हूं।

क्या कोई तरीका है कि मैं गिट 'प्रतिबद्ध' को हर बार एक फ़ाइल अपडेट होने पर स्वचालित रूप से चालू कर सकता हूं – क्या कोई फ़ाइल में हर परिवर्तन के लिए एक नया प्रतिबद्धता है?

आदर्श रूप से मैं अपने उपयोगकर्ताओं को यह भी नहीं जानना चाहूंगा कि परिदृश्य के पीछे जीआईटी चल रहा है एक उपयोगकर्ता तब संभवत: एक फ़ाइल में "पूर्ववत" परिवर्तन कर सकता है – और यह पिछले संस्करण को git से बाहर खींचकर प्राप्त किया जा सकता है।

Solutions Collecting From Web of "जीआईटी ऑटो-कमिट बनाना"

लिनक्स पर आप हर बार एक फ़ाइल की सामग्री बदलते समय एक आदेश को स्वचालित रूप से निष्पादित करने के लिए inotifywait का उपयोग कर सकते हैं।

संपादित करें: निम्न कमांड file.txt के रूप में जैसे ही सहेजी जाती है, कम करती है:

inotifywait -q -m -e CLOSE_WRITE --format="git commit -m 'autocommit on change' %w" file.txt | sh 

पहले के अन्तर्निर्मित उत्तर महान है, लेकिन यह एक पूर्ण समाधान नहीं है। लिखित रूप में, यह एक फ़ाइल में एक बार परिवर्तन के लिए एक शॉट शॉट है। यह सामान्य मामले के लिए काम नहीं करता है, जहां एक फ़ाइल का संपादन मूल नाम के साथ एक नया इनोड बनाता है। inotifywait- एम जाहिरा तौर पर आईएनडी द्वारा फ़ाइलें नाम के अनुसार नहीं, इसके अलावा, फ़ाइल बदल जाने के बाद, यह git add या git commit -a के बिना git कमांड के लिए मंचन नहीं किया गया है कुछ समायोजन करना, यहां ये है कि मैं अपने कैलेंडर फ़ाइल में सभी परिवर्तनों को ट्रैक करने के लिए डेबियन पर क्या उपयोग कर रहा हूं:

/etc/rc.local:

 su -c /home/<username>/bin/gitwait -l <username> 

/ घर / <उपयोगकर्ता नाम> / bin / gitwait:

 #!/bin/bash # # gitwait - watch file and git commit all changes as they happen # while true; do inotifywait -qq -e CLOSE_WRITE ~/.calendar/calendar cd ~/.calendar; git commit -a -m 'autocommit on change' done 

यह फ़ाइलों और / या निर्देशिकाओं की एक सूची पर प्रतीक्षा करने के लिए सामान्यीकृत किया जा सकता है, और संबंधित अन्वेषण प्रक्रियाएं, और प्रत्येक इनोटिफाइवाइट को पुनः आरंभ करने के रूप में फ़ाइल परिवर्तित हो सकती है

इस नौकरी के लिए इनोटिफाइवाइट की सिफारिश करने वाले पिछले उत्तरों ने मुझे सही दिशा में इशारा किया जब मुझे यह समस्या थी, इसलिए मैंने एक छोटी सी लिपि लिखी पहले यह केवल पूरे फ़ोल्डर्स को बार-बार (लेस्टर बक के उदाहरण के विपरीत) देख सकता था, लेकिन फिर मैं कहीं और एक फाइल देखना चाहता था, इसलिए मैंने इसे विस्तार किया।

नतीजा एक स्क्रिप्ट है जिसे वर्तमान में gitwatch कहा जाता है, क्योंकि यह वही है जो यह करता है: यह परिवर्तन के लिए एक फ़ाइल या फ़ोल्डर को देखता है (inotifywait का उपयोग करके), और उन्हें एक git रिपॉजिटरी में जमा करता है

आप स्क्रिप्ट, गिटूब पर अधिक जानकारी और निर्देश पा सकते हैं: https://github.com/nevik/gitwatch

git-wip एक महान समाधान है जो मेरे लिए अच्छी तरह से काम करता है "डब्लूआईपी" का अर्थ है "काम प्रगति पर है" हर बार जब आप 'git wip' चलाते हैं, परिवर्तन एक अलग शाखा के लिए प्रतिबद्ध हैं। यह कमांड लाइन पर चलाया जा सकता है, लेकिन विम और एएमएसीएस के लिए एक्सटेंशन हैं जो हर बार एक फ़ाइल लिखी जाने पर जीआईटी-पिप को स्वचालित रूप से चलाते हैं।

मैं इसे खिड़कियों में करना चाहता था, और पाया कि डायरेक्ट्री मॉनिटर का उपयोग करने के लिए सबसे अच्छा तरीका परिवर्तनों की जांच करना था, जब यह पता चला कि कोई परिवर्तन हुआ है, तो इसे चलाया गया है:

कार्यक्रम: cmd.exe

पैरामा: /CC:\पथथोबफ़फ़ाइल.बेट

उस बैच फ़ाइल में निहित है:

 c: cd c:\gitRepoDirectory\ (if exist "%PROGRAMFILES(X86)%" ( "%PROGRAMFILES(X86)%\git\bin\sh.exe" --login -i -c "git commit -am AutoCommitMessage" ) else ( "%PROGRAMFILES%\git\bin\sh.exe" --login -i -c "git commit -am AutoCommitMessage" )) 

मैंने भी फाइलों को जोड़ने के लिए एक अन्य कमांड की कोशिश की ( "%PROGRAMFILES(X86)%\git\bin\sh.exe" --login -i -c "git add *.*" ), लेकिन मुझे नहीं लगता मुझे वह काम ठीक से मिला।

मैंने भी एक पोस्ट-प्रतिबद्ध हुक बनाया है:

 #!/bin/sh git.exe pull -v --progress "origin" git.exe push --progress "origin" master:master curl.exe -s https://webserverdomain.com/updateFromGitHook.x?r=repoName 

(यदि कोई संघर्ष हुआ तो यह पुल को रोकना और पुश को खत्म करना था, लेकिन यह कहने का कोई स्पष्ट तरीका नहीं था कि – अंत में हमने इस एक दोष के पूरे विचार को त्याग दिया।)

उस कर्ल आदेश ने मेरे सर्वर को बताया कि उसे कोड पर एक पुल करने की ज़रूरत है सभी को इसे php में संभाल करने के लिए आवश्यक था:

 <? $r = $_GET['r']; if (!empty($c)) { //use system instead of exec if you want the output to go back to the git client exec("cd /path/to/repo/parent/$r; sudo git reset --hard HEAD; sudo git pull;"); echo "\n\nServer: Updated\n\n"; } else { echo "\n\nServer: UPDATE FAILED\n\n"; } ?> 

इसके साथ एकमात्र समस्या यह थी कि अपाचे उपयोगकर्ता के बजाय रूट उपयोगकर्ता द्वारा चलाया जाना आवश्यक था, इसलिए मुझे /etc/sudoers.d/ में एक फाइल बनाने की भी आवश्यकता थी:

 www-data ALL = NOPASSWD: /usr/bin/git 

मेरे लिए, मुझे लगता है कि बहुत अच्छा काम किया। डायरेक्टरी मॉनिटर को स्टार्टअप पर चलाने और कम से कम करने के लिए कॉन्फ़िगर किया जा सकता है, और यह कई अलग-अलग फ़ोल्डर देख सकता है

 #!/bin/bash git commit -a -m "autoupdate `date +%F-%T`" git push 

वर्तमान दिनांक और समय के साथ autopushing।

सचमुच सचमुच नौकरी के लिए सही उपकरण की तरह लग रहा है।

एक उपकरण है, जिसे आप्रॉन कहा जाता है, जो कि वास्तव में आप के लिए देख रहे हैं। आप किसी ऐसी क्रंटैब की तरह कुछ में फ़ाइलें या फ़ोल्डर्स (और इवेंट प्रकार, जैसे "बदलें", "बनाएँ", "अनलिंक"), और ऐसी घटना जब होती है, तो चलाने के लिए एक आदेश निर्दिष्ट कर सकते हैं।

Inotifywait (जो गरीब आदमी के क्रोन sleep 10;do stuff का एनालॉग sleep 10;do stuff विपरीत), sleep 10;do stuff विपरीत, यह हर घटना को पकड़ने, न सिर्फ पहले होगा

मैंने खुद का इस्तेमाल नहीं किया है, लेकिन दस्तावेज़ीकरण से यह सेटअप के लिए बहुत जटिल नहीं दिखता है।

मैंने आपके स्थानीय जीआईटी रिपॉजिटरी के लिए ऑटोशेव प्रदान करने के लिए एक प्रोग्राम, गिटप्रिमेम लिखा था। इससे पहले कि आप इसे का पर्दाफाश करने के लिए अब वापस रोल करने के लिए आसान! बिटबकेट रिपॉजिटरी

यह किसी भी प्लेटफ़ॉर्म पर कार्य करना चाहिए जो विंडोज + साइगविन सहित किसी बाश खोल का समर्थन करता है।

अगर कोई भी पावरशेल्ड से ऐसा करने की कोशिश करता है तो मुझे निम्नलिखित का उपयोग करने में सफलता मिली:

 & "C:\Program Files (x86)\Git\bin\sh.exe" -c "cd D:\PATH\TO\REPO && git add --all && git commit -m 'Automatic Commit Message Goes Here' && git push origin master" 

यदि आप फ़ाइल का नाम जानते हैं और आप केवल एक (या कुछ फाइलें) पर नज़र रखना चाहते हैं, तो आप इसे प्राप्त करने के लिए हर कुछ मिनटों में "git commit" को कॉल कर सकते हैं। अगर फाइल में बदलाव नहीं हुआ है, तो गिट सिर्फ शिकायत करेगा और आपको इस त्रुटि की अनदेखी करनी होगी, लेकिन उस के अलावा, कोई भ्रष्टाचार नहीं होगा

उस के अतिरिक्त, आप इन फ़ाइलों को "ऑटो कमिट" के रूप में चिह्नित करना चाहते हैं ताकि स्वयं मैन्युअल रूप से प्रतिबद्ध हो सकें। इस तरह से, उपयोगकर्ता स्वत: परिवर्तन देख सकता है और बड़ी "तार्किक" परिवर्तन भी कर सकता है जो बताते हैं कि अंतिम मैन्युअल प्रतिबद्ध होने के बाद से यह बदलाव आया है।

उदाहरण के लिए, प्रतिबद्ध संदेश के रूप में "AUTOCOMMIT" का उपयोग करें। बाद में, आप जीआईटी लॉग (मारने के लिए संशोधनों को खोजने के लिए) का उपयोग करके इन कमानों को शुद्ध करने के लिए एक उपकरण लिख सकते हैं या आप "मैन्युअल कमेट्स" में हथौड़ा करने के लिए एक क्रूर बल टक्कर हल करने की रणनीति का उपयोग करके एक शाखा AUTOCOMMIT बनाने का प्रयास कर सकते हैं।

एक और विकल्प यह है कि जीआईटी की कम-स्तरीय कमांड का इस्तेमाल करना आपकी खुद की विशेष रेजोजिटरी बनाना है।

अंत में, आप फ़ाइल को एक नए नाम ("$ filename.ac") की प्रतिलिपि बना सकते हैं, जबकि मैन्युअल और स्वचालित संस्करणों के बीच अंतर करने के लिए ऑटो कमेट करते हैं

मुझे पूरा यकीन है कि आपको हुक करने की आवश्यकता होगी जो आपके उपयोगकर्ता जो भी संपादक उपयोग कर रहे हैं आप परिवर्तनों के लिए चुनाव के लिए कुछ लिख सकते हैं, लेकिन उपयोग के पैटर्न के आधार पर, मतभेद की आवृत्ति को बेहद जरूरी होना पड़ सकता है यह सुनिश्चित करने के लिए कि वह कई बदलावों के बजाय अलग-अलग बदलाव उठा रहा था।

मुझे एक ही समस्या थी और मैक लॉन्च ने आपको एक महान समाधान प्रदान किया था। यह एक फ़ाइल या निर्देशिका को देखेगा और अगर कोई बदलाव होंगे तो आप एक ऐप या कुछ और चला सकते हैं …

ऐसा लगता है कि आप एक्टिकपैर के समान कुछ खोज रहे हैं, जो कि आपके सभी बदलावों को / या git (/ या VCS में जो भी आप चाहते हैं) में अपने आप को चेक करने के लिए डिज़ाइन किया गया है, लेकिन मुझे कोई कारण नहीं पता है कि यह फ़ाइलों के साथ प्रयोग नहीं किया जा सकता है / etc में उन के अलावा

यदि आप केवल एक ही फाइल से निपटना चाहते हैं, हो सकता है कि यह सही नहीं होगा, लेकिन अगर आप किसी दी गई निर्देशिका में सब कुछ का ट्रैक रखना चाहते हैं, तो मुझे लगता है कि इसकी जाँच करना सही है

जब कोई उपयोगकर्ता फाइल बदलता है, तो यह स्क्रिप्ट नहीं चलता, लेकिन यह एक क्रॉन नौकरी के रूप में चलाया जा सकता है (इसे /etc/cron.* निर्देशिका में छोड़कर), जो एक उचित समाधान भी है।

यह स्क्रिप्ट आपकी / srv / www निर्देशिका के माध्यम से पुनरावृत्त करेगी (जहां आपकी सभी साइटें संग्रहीत की जाती हैं उसे बदल दें), सभी फ़ाइलों को जोड़, प्रतिबद्ध और पुश करें, और /var/log/gitlog.txt के लिए सब कुछ लॉग करें

 now=$(date +"%m.%d.%Y_%T") logfile='/var/log/gitlog.txt' for dir in /srv/www/*/ do echo -e '\n' >> $logfile echo "autocommit $dir $now" >> $logfile echo "--------------------------" >> $logfile cd $dir git add . >> $logfile git commit -am "autocommit $now" >> $logfile git push origin master >> $logfile done 

दो समाधान जो मुझे पसंद हैं, etckeeper हैं – जो /etc अलावा एक कस्टम निर्देशिका में अनुकूलित किया जा सकता है :

 mkdir /foo etckeeper -d /foo init` etckeeper -d /foo commit 'message' 

और गिटवॉक – विशेष रूप से supervisord साथ इसका उपयोग करने के निर्देश।