স্থানীয় রেপোতে প্রতিশ্রুতি দেওয়ার পরে কীভাবে আমি গিটটি স্বয়ংক্রিয়ভাবে একটি দূরবর্তী রেপোতে (স্বয়ংক্রিয়ভাবে আমার পাসফ্রেজ সরবরাহ করে) চাপতে পারি?
স্থানীয় রেপোতে প্রতিশ্রুতি দেওয়ার পরে কীভাবে আমি গিটটি স্বয়ংক্রিয়ভাবে একটি দূরবর্তী রেপোতে (স্বয়ংক্রিয়ভাবে আমার পাসফ্রেজ সরবরাহ করে) চাপতে পারি?
উত্তর:
প্রথমে নিশ্চিত হয়ে নিন যে আপনি নিজের পাসওয়ার্ড না দিয়ে ম্যানুয়ালি চাপ দিতে পারেন। আপনি যদি এইচটিটিপি বা এইচটিটিপিএসের উপর চাপ দিচ্ছেন, তা হয় লগইন বিশদ সহ কোনও .netrc
ফাইল তৈরি করা বা দূরবর্তীটির URL এ আপনার ব্যবহারকারীর নাম এবং পাসওয়ার্ড যুক্ত করার ক্ষেত্রে এটি ঘটবে । আপনি যদি এসএসএইচ ব্যবহার করে থাকেন তবে আপনি হয় একটি কী-পেয়ার তৈরি করতে পারেন যেখানে ব্যক্তিগত কীতে কোনও পাসওয়ার্ড নেই, বা আপনার ব্যক্তিগত কীটি ক্যাশে করতে ব্যবহার 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 / হুক ডিরেক্টরিতে "পোস্ট কমিট" নামে একটি ফাইল তৈরি করুন, যদিও আপনি যদি স্বয়ংক্রিয়ভাবে একটি পাসওয়ার্ড সরবরাহ করতে চান, তবে পরিবর্তনের প্রয়োজন হবে।
এই গিট-অটোপশ স্ক্রিপ্টটি আপনাকে " স্বয়ংক্রিয়ভাবে পুশ করার পদ্ধতি কীভাবে কনফিগার করা যায়? " - তে প্রস্তাবিত অনুরূপ পোস্ট-কমিট হুক সেটআপ করতে দেয় ।
তবে পাসফ্রেজের জন্য আপনার একটি চালানোssh-agent
দরকার ।
ssh-agent
, শুধু আরেকটি পাসফ্রেজ-কম ব্যবহার git
-only ssh
-key: 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
ইউআরএল এর মতো কিছু git@pushonly:path/to/repo.git
। ডিবাগ করতে: ssh git@pushonly COMMAND
চালাতে git-shell -c COMMAND
হবে DESTINATION
। জন্য COMMAND
দেখতেman git-shell
-t ed25519
? আমি সাধারণত ব্যবহার করি -t rsa
যদিও সাম্প্রতিককালে আমাকে যুক্ত -m PEM
করতে হবে ssh-keygen
( stackoverflow.com/a/53645530/6309 , stackoverflow.com/a/53729009/6309 )।
ed25519
কারণ এটি সংক্ষিপ্ত এবং সহজ লাইন দেয় ~/.ssh/authorized_keys
। এছাড়াও এটি খুব মজার বিষয় যে ডিজেবি এডি 255519 সম্পর্কে কী লিখেছে : পার্শ্ব চ্যানেলগুলি ( স্পেকটার ), কম সিপিইউ ইত্যাদির বিরুদ্ধে সুরক্ষিত বিটিডাব্লু , পুরানোগুলির সাথে লেনদেন করার সময় sshd
আমি সাধারণত তাদের জন্য একটি বিশেষ কী তৈরি করি এবং তারপরে এটিকে কনফিগার করি ~/.ssh/config
।
লিনাক্স এবং উইন্ডোজ (গিট ব্যাশ) ব্যবহারকারীদের জন্য এসএসএসের উপরে পাসফ্রেজ সরবরাহ না করে ধাক্কা / টান দেওয়ার সহজ নির্দেশনা এখানে দেওয়া হল
আপনার ক্লায়েন্টে:
আপনার 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
আপনার যদি কোনও কী না থাকে (দুটি "ls: অ্যাক্সেস করতে পারে না ..." লাইনগুলি) একটি নতুন তৈরি করে। যদি আপনার কোনও কী থাকে তবে এই পদক্ষেপটি এড়িয়ে যান।
$ 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
রিমোট সার্ভারে আপনার কী অনুলিপি করুন যা থেকে আপনি গিট ব্যবহার করে টানতে বা ধাক্কা দিতে চান:
$ 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: এই পদ্ধতিটি ব্যবহার করার আগে আপনাকে ব্যবহারকারীর নাম ব্যবহার করে সার্ভারে লগইন করতে হবে (হোম ডিরেক্টরি যেখানে প্রথমে লগইনের সময় 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"`
}
}