मैं स्थानीय रेपो के लिए प्रत्येक कमिट के बाद किसी दूरस्थ रेपो (स्वचालित रूप से अपना पासफ़्रेज़ प्रदान करने सहित) को स्वचालित रूप से पुश करने के लिए कैसे सेट करूँ?
मैं स्थानीय रेपो के लिए प्रत्येक कमिट के बाद किसी दूरस्थ रेपो (स्वचालित रूप से अपना पासफ़्रेज़ प्रदान करने सहित) को स्वचालित रूप से पुश करने के लिए कैसे सेट करूँ?
जवाबों:
सबसे पहले, सुनिश्चित करें कि आप अपना पासवर्ड प्रदान किए बिना मैन्युअल रूप से धक्का दे सकते हैं। यदि आप HTTP या HTTPS पर जोर दे रहे हैं, तो यह लॉगिन विवरण के साथ फ़ाइल बनाने.netrc
या रिमोट के लिए URL में अपना उपयोगकर्ता नाम और पासवर्ड जोड़ने का मामला होगा । यदि आप SSH का उपयोग कर रहे हैं, तो आप या तो एक कीपर बना सकते हैं जहाँ निजी कुंजी का पासवर्ड नहीं है, या अपनी निजी कुंजी को कैश करने के ssh-agent
लिए उपयोग करें ।
फिर आपको एक निष्पादन योग्य ( chmod +x
) फ़ाइल बनानी चाहिए .git/hooks/post-commit
जिसमें निम्नलिखित शामिल हैं:
#!/bin/sh
git push origin master
... उस लाइन को कस्टमाइज़ करना यदि आप किसी अन्य माध्यम से रिमोट को पुश करना चाहते हैं origin
, या इसके अलावा किसी शाखा को पुश करना चाहते हैं master
। सुनिश्चित करें कि आप उस फ़ाइल को निष्पादन योग्य बनाते हैं।
.git/config
उपसर्ग के साथ संगत रिमोट शाखा है feature/xy/
।
यदि आप मास्टर शाखा से अधिक का उपयोग करना शुरू करते हैं, तो आप वर्तमान शाखा को स्वचालित रूप से धक्का देना चाह सकते हैं। मेरा हुक ( .git/hooks/post-commit
) इस तरह दिखता है:
#!/usr/bin/env bash
branch_name=$(git symbolic-ref --short HEAD)
retcode=$?
non_push_suffix="_local"
# Only push if branch_name was found (my be empty if in detached head state)
if [ $retcode -eq 0 ] ; then
#Only push if branch_name does not end with the non-push suffix
if [[ $branch_name != *$non_push_suffix ]] ; then
echo
echo "**** Pushing current branch $branch_name to origin [i4h post-commit hook]"
echo
git push origin $branch_name;
fi
fi
यह वर्तमान शाखा को धक्का देता है, अगर यह शाखा के नाम को प्रतीकात्मक प्रतीकात्मक-रेफरी के साथ निर्धारित कर सकता है।
" गिट में वर्तमान शाखा का नाम कैसे प्राप्त करें? " वर्तमान शाखा का नाम प्राप्त करने के लिए इस और अन्य तरीकों से संबंधित है।
टास्क शाखाओं में काम करने के दौरान हर शाखा के लिए एक स्वचालित धक्का परेशान कर सकता है जहां आप कुछ सॉसेज होने की उम्मीद करते हैं (आप पुश करने के बाद आसानी से रीबेस नहीं कर पाएंगे)। तो हुक उन शाखाओं को धक्का नहीं देगा जो एक परिभाषित प्रत्यय के साथ समाप्त होते हैं (उदाहरण में "_local")।
#!/bin/sh
इसे काम करने के लिए उपयोग करना था । अन्यथा यह कहता रहा error: cannot run .git/hooks/post-commit: No such file or directory
:। धन्यवाद, मुझे आपका समाधान सबसे अच्छा लगा।
"Git push" सामग्री के साथ .it / हुक निर्देशिका में "पोस्ट-कमिट" नाम की एक फ़ाइल बनाएँ, हालाँकि यदि आप स्वचालित रूप से पासवर्ड प्रदान करना चाहते हैं, तो संशोधन की आवश्यकता होगी।
यह गिट-ऑटोपुश स्क्रिप्ट आपको "बाद में स्वचालित धक्का कैसे कॉन्फ़िगर करें? "
लेकिन पासफ़्रेज़ के लिए, आपको एक चलाने कीssh-agent
आवश्यकता है ।
ssh-agent
, बस एक और पदबंध-कम उपयोग git
-only ssh
-कुंजी: ssh-keygen -t ed25519 -f ~/.ssh/id_pushonly
। echo $'\nHost pushonly\nHostname DESTINATION\nIdentityFile ~/.ssh/id_pushonly\n' >> ~/.ssh/config
। पर DESTINATION
कॉन्फ़िगर git-shell
में दिखाया गया है superuser.com/a/444899/72223 से pubkey का उपयोग कर ~/.ssh/id_pushonly.pub
। जरूरत git
-LL कुछ इस तरह है git@pushonly:path/to/repo.git
। डिबग करने के लिए: ssh git@pushonly COMMAND
चलाना चाहिए git-shell -c COMMAND
पर DESTINATION
। के लिए COMMAND
देखman git-shell
-t ed25519
? मैं आम तौर पर उपयोग करता हूं -t rsa
, हालांकि हाल ही में मुझे ( stackoverflow.com/a/53645530/6309 , stackoverflow.com/a/53729009/6309 ) को जोड़ना -m PEM
है । ssh-keygen
ed25519
क्योंकि यह छोटी और आसान लाइनें देता है ~/.ssh/authorized_keys
। यह भी बहुत दिलचस्प है कि डीजेबी एड 255519 के बारे में क्या लिखता है : साइड चैनल (स्पेक्टर), कम सीपीयू, आदि बीटीडब्ल्यू के खिलाफ सुरक्षित करें, जब पुराने sshd
एस के साथ काम करते हैं , तो मैं आमतौर पर उनके लिए एक विशेष कुंजी बनाता हूं और फिर इसे कॉन्फ़िगर करता हूं ~/.ssh/config
।
लिनक्स और विंडोज (git bash) का उपयोग करने वाले लोगों के लिए ssh पर पासफ़्रेज़ प्रदान किए बिना धकेलने / खींचने के लिए सरल निर्देश है
अपने ग्राहक पर:
देखें कि क्या आपके पास ssh कीज़ जेनरेट हुई हैं:
$ ls ~/.ssh/id_rsa.pub; ls ~/.ssh/id_dsa.pub
/c/Users/Cermo/.ssh/id_rsa.pub <-- I have RSA key
ls: cannot access '/c/Users/Cermo/.ssh/id_dsa.pub': No such file or directory
यदि आपके पास कोई कुंजी नहीं है (दो "एलएस: एक्सेस नहीं कर सकते ..." लाइनें) एक नया उत्पन्न करती हैं। यदि आपके पास कोई कुंजी है तो इस चरण को छोड़ दें।
$ ssh-keygen.exe
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Cermo/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): <-- press Enter
Enter same passphrase again: <-- press Enter
अपनी कुंजी को दूरस्थ सर्वर पर कॉपी करें जिससे आप git का उपयोग करके खींचना या धक्का देना चाहते हैं:
$ ssh-copy-id user_name@server_name
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to
filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you
are prompted now it is to install the new keys
user_name@server_name's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'user_name@server_name'"
and check to make sure that only the key(s) you wanted were added.
नोट: आपको इस ऑपरेशन के दौरान पासवर्ड देना होगा। उसके बाद आपका पुल / पुश ऑपरेशन पासवर्ड का अनुरोध नहीं करेगा।
नोट 2: आपको इस प्रक्रिया का उपयोग करने से पहले कम से कम एक बार user_name का उपयोग करके सर्वर पर लॉग इन करना होगा (होम डायरेक्टरी जिसमें ssh कीज कॉपी की गई हैं, पहले लॉगिन के दौरान बनाई गई हैं)
यहाँ push
दूरस्थ स्क्रिप्ट के लिए स्वचालित रूप से गिट के लिए बैश स्क्रिप्ट है
$ cd /path/to/your/repository
तब$ push
उदाहरण के लिए इस स्क्रिप्ट को एक फ़ाइल में रखें $HOME/.ssh/push
#!/bin/bash
# Check connection
ssh-add -l &>/dev/null
[[ "$?" == 2 ]] && eval `ssh-agent` > /dev/null
# Check if git config is configured
if [ ! $(git config user.name) ]
then
git config --global user.name <user_name>
git config --global user.email <user_email>
fi
# Check if expect is installed
if [[ ! $(dpkg -l | grep expect) ]]
then
apt-get update > /dev/null
apt-get install --assume-yes --no-install-recommends apt-utils expect > /dev/null
fi
# Check identity
ssh-add -l &>/dev/null
[[ "$?" == 1 ]] && expect $HOME/.ssh/agent > /dev/null
# Clean and push repo
REMOTE=$(git remote get-url origin)
URL=git@github.com:${REMOTE##*github.com/}
[[ $REMOTE == "http"* ]] && git remote set-url origin $URL
git add . && git commit -m "test automatically push to a remote repo"
git status && git push origin $(git rev-parse --abbrev-ref HEAD) --force
इसे /bin
डायरेक्ट्री से लिंक करें ताकि इसे केवल $ push
कमांड द्वारा बुलाया जा सके
$ sudo ln -s $HOME/.ssh/push /bin/push
$ chmod +x /bin/push
यदि आप कर्कश का उपयोग कर रहे हैं, तो यह आपकी post-commit
हुक फ़ाइल को डिफ़ॉल्ट रूप से अधिलेखित कर देगा ।
हम इस आदेश का उपयोग पैकेज में कर रहे हैं। ऑटो-रिबास और किसी भी काम को करने के लिए पुश करें। (पहला रन yarn add --dev git-branch-is
।)
"husky": {
"hooks": {
"post-commit": "git-branch-is master && git rebase origin master && git push origin master"`
}
}