এটি ব্যবহার করে কোনও ওয়েবসাইট স্থাপন করা কি সম্ভব git push
? আমি একটি দলা এটি ব্যবহার সঙ্গে কি কিছু আছে আছে Git আঙ্গুলসমূহ একটি সম্পাদনের জন্য git reset --hard
সার্ভার প্রান্তের উপর, কিন্তু আমি এই পৌঁছনোর কিভাবে যেতে হবে?
এটি ব্যবহার করে কোনও ওয়েবসাইট স্থাপন করা কি সম্ভব git push
? আমি একটি দলা এটি ব্যবহার সঙ্গে কি কিছু আছে আছে Git আঙ্গুলসমূহ একটি সম্পাদনের জন্য git reset --hard
সার্ভার প্রান্তের উপর, কিন্তু আমি এই পৌঁছনোর কিভাবে যেতে হবে?
উত্তর:
আমি দেখেছি এই স্ক্রিপ্টের উপর এই সাইটের এবং বেশ ভাল এটা কাজ মনে হয়।
আপনার স্থানীয় অনুলিপিতে, আপনার .git / কনফিগারেশন ফাইলটি সংশোধন করুন এবং আপনার ওয়েব সার্ভারকে রিমোট হিসাবে যুক্ত করুন:
[remote "production"]
url = username@webserver:/path/to/htdocs/.git
সার্ভারে, এই ফাইলটি দিয়ে .git / hooks / post-update প্রতিস্থাপন করুন (নীচের উত্তরে)
ফাইলটিতে এক্সিকিউট এক্সেস যুক্ত করুন (আবার, সার্ভারে):
chmod +x .git/hooks/post-update
এখন, কেবলমাত্র স্থানীয়ভাবে আপনার ওয়েব সার্ভারে চাপ দিন এবং এটি স্বয়ংক্রিয়ভাবে কাজের অনুলিপিটি আপডেট করা উচিত:
git push production
নীচে পোস্ট-আপডেট ফাইল ব্যবহার :
আপনার স্থানীয় অনুলিপিতে, আপনার .git / কনফিগারেশন ফাইলটি সংশোধন করুন এবং আপনার ওয়েব সার্ভারকে রিমোট হিসাবে যুক্ত করুন:
[remote "production"]
url = username@webserver:/path/to/htdocs/.git
সার্ভারে, নীচের ফাইলের সাথে .git / hooks / পোস্ট-আপডেট প্রতিস্থাপন করুন
ফাইলটিতে এক্সিকিউট এক্সেস যুক্ত করুন (আবার, সার্ভারে):
chmod +x .git/hooks/post-update
এখন, কেবলমাত্র স্থানীয়ভাবে আপনার ওয়েব সার্ভারে চাপ দিন এবং এটি স্বয়ংক্রিয়ভাবে কাজের অনুলিপিটি আপডেট করা উচিত:
git push production
#!/bin/sh
#
# This hook does two things:
#
# 1. update the "info" files that allow the list of references to be
# queries over dumb transports such as http
#
# 2. if this repository looks like it is a non-bare repository, and
# the checked-out branch is pushed to, then update the working copy.
# This makes "push" function somewhat similarly to darcs and bzr.
#
# To enable this hook, make this file executable by "chmod +x post-update".
git-update-server-info
is_bare=$(git-config --get --bool core.bare)
if [ -z "$is_bare" ]
then
# for compatibility's sake, guess
git_dir_full=$(cd $GIT_DIR; pwd)
case $git_dir_full in */.git) is_bare=false;; *) is_bare=true;; esac
fi
update_wc() {
ref=$1
echo "Push to checked out branch $ref" >&2
if [ ! -f $GIT_DIR/logs/HEAD ]
then
echo "E:push to non-bare repository requires a HEAD reflog" >&2
exit 1
fi
if (cd $GIT_WORK_TREE; git-diff-files -q --exit-code >/dev/null)
then
wc_dirty=0
else
echo "W:unstaged changes found in working copy" >&2
wc_dirty=1
desc="working copy"
fi
if git diff-index --cached HEAD@{1} >/dev/null
then
index_dirty=0
else
echo "W:uncommitted, staged changes found" >&2
index_dirty=1
if [ -n "$desc" ]
then
desc="$desc and index"
else
desc="index"
fi
fi
if [ "$wc_dirty" -ne 0 -o "$index_dirty" -ne 0 ]
then
new=$(git rev-parse HEAD)
echo "W:stashing dirty $desc - see git-stash(1)" >&2
( trap 'echo trapped $$; git symbolic-ref HEAD "'"$ref"'"' 2 3 13 15 ERR EXIT
git-update-ref --no-deref HEAD HEAD@{1}
cd $GIT_WORK_TREE
git stash save "dirty $desc before update to $new";
git-symbolic-ref HEAD "$ref"
)
fi
# eye candy - show the WC updates :)
echo "Updating working copy" >&2
(cd $GIT_WORK_TREE
git-diff-index -R --name-status HEAD >&2
git-reset --hard HEAD)
}
if [ "$is_bare" = "false" ]
then
active_branch=`git-symbolic-ref HEAD`
export GIT_DIR=$(cd $GIT_DIR; pwd)
GIT_WORK_TREE=${GIT_WORK_TREE-..}
for ref
do
if [ "$ref" = "$active_branch" ]
then
update_wc $ref
fi
done
fi
অনেকগুলি ভুয়া শুরু এবং শেষের পরে, আমি এই নিবন্ধটির জন্য কেবল "গিট পুশ রিমোট " ধন্যবাদ দিয়ে ওয়েবসাইট কোড স্থাপন করতে সক্ষম হয়েছি ।
লেখকের আপডেট-পরবর্তী স্ক্রিপ্টটি কেবল একটি লাইন দীর্ঘ এবং তার সমাধানের জন্য গিট রেপোকে অন্য কেউ যেমন লুকানোর জন্য .htaccess কনফিগারেশন প্রয়োজন হয় না।
আপনি যদি এটি একটি অ্যামাজন ইসি 2 উদাহরণে স্থাপন করছেন তবে কয়েকটি হোঁচট খাচ্ছে;
1) আপনি যদি খালি গন্তব্য সংগ্রহস্থল তৈরি করতে sudo ব্যবহার করেন তবে আপনাকে রেপোর মালিককে AC2-ব্যবহারকারীতে পরিবর্তন করতে হবে অথবা পুশ ব্যর্থ হবে। ("ক্লাউন ইক 2 ব্যবহারকারী: ইক 2-ব্যবহারকারী রেপো " চেষ্টা করুন)
2) আপনি যদি আপনার অ্যামাজন-প্রাইভেট-কী .pem এর অবস্থানটি পূর্বে কনফিগার না করে থাকেন তবে এই ধাক্কাটি ব্যর্থ হবে etc হোস্ট] - হোস্টনাম - আইডেন্টিটি ফাইল - ব্যবহারকারী "লেআউটটি এখানে বর্ণিত ...
... তবুও যদি হোস্টটি ~ / .ssh / config এ কনফিগার করা থাকে এবং হোস্টনামের চেয়ে পৃথক হয় তবে গিট পুশ ব্যর্থ হবে। (এটি সম্ভবত গিট বাগ)
সার্ভারে গিট ইনস্টল করবেন না বা সেখানে .git ফোল্ডারটি অনুলিপি করুন। গিট ক্লোন থেকে সার্ভার আপডেট করতে আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:
git ls-files -z | rsync --files-from - --copy-links -av0 . user@server.com:/var/www/project
আপনাকে প্রকল্প থেকে সরানো ফাইলগুলি মুছতে হবে।
এটি সমস্ত পরীক্ষিত ফাইলগুলিকে অনুলিপি করে। rsync ssh ব্যবহার করে যা সার্ভারে যাইহোক ইনস্টল করা আছে।
আপনি সার্ভারে যত কম সফ্টওয়্যার ইনস্টল করেছেন তিনি তত বেশি সুরক্ষিত এবং এর কনফিগারেশনটি পরিচালনা করতে এবং এটি নথিভুক্ত করা সহজ। সার্ভারে একটি সম্পূর্ণ গিট ক্লোন রাখার দরকার নেই। এটি কেবল সবকিছু যথাযথভাবে সুরক্ষিত করা আরও জটিল করে তোলে।
সংক্ষেপে আপনাকে যা করতে হবে তা হ'ল:
server = $1
branch = $2
git push $server $branch
ssh <username>@$server "cd /path/to/www; git pull"
আমার প্রয়োগে সেই লাইনগুলি একটি এক্সিকিউটেবল কল হিসাবে রয়েছে deploy
।
সুতরাং আমি যখন একটি মোতায়েন করতে চাই তখন টাইপ করি ./deploy myserver mybranch
।
ssh -A ...
git pull
স্বয়ংক্রিয় মোতায়েনের জন্য ব্যবহার এড়ানো উচিত কারণ এর কোনও সংশ্লেষের অংশটি ম্যানুয়াল ক্লিনআপের প্রয়োজন হতে পারে যদি কোনও বিরোধ থাকে conflic
আমি যেভাবে এটি করি তা হ'ল আমার ডিপ্লোয়মেন্ট সার্ভারে আমি খালি গিট সংগ্রহস্থল রাখি যেখানে আমি পরিবর্তনগুলিকে ধাক্কা দিয়ে থাকি। তারপরে আমি ডিপ্লোয়মেন্ট সার্ভারে লগইন করি, প্রকৃত ওয়েব সার্ভার ডক্স ডিরেক্টরিতে পরিবর্তন করি এবং গিট টান করি। এটি স্বয়ংক্রিয়ভাবে করার চেষ্টা করার জন্য আমি কোনও হুক ব্যবহার করি না, এটি মনে হয় এটির চেয়ে মূল্য বেশি কষ্টের।
git reset
মধ্যে ফিরে যেতে ব্যবহার করতে পারেন (সমস্ত প্রতিশ্রুতি, কেবল পুরো টান নয়)। আপনার যদি সুনির্দিষ্ট কোনও কিছু রোল করতে হয় যা সর্বশেষ প্রতিশ্রুতি নয়, তবে আপনি ব্যবহার করতে পারেন তবে এটি সম্ভবত জরুরী পরিস্থিতিতে ব্যবহার করা উচিত ( একটি নতুন প্রতিশ্রুতি তৈরি করে যা কিছু পূর্ববর্তী প্রতিশ্রুতির প্রভাবকে অগ্রাহ্য করে)। git revert
git revert
git config --local receive.denyCurrentBranch updateInstead
গিট ২.৩-এ যুক্ত হয়েছে, এটি একটি ভাল সম্ভাবনা হতে পারে: https://github.com/git/git/blob/v2.3.0/ ডকুমেন্টেশন / কনফিগ.txt#L2155
আপনি এটি সার্ভার ভান্ডারটিতে সেট করেছেন এবং এটি কার্যকরী ট্রিটি পরিষ্কার থাকলে আপডেটও করে।
push-to-checkout
অনাগত শাখার হুক এবং পরিচালনা করার সাথে ২.৪-তে আরও উন্নতি হয়েছে ।
নমুনা ব্যবহার:
git init server
cd server
touch a
git add .
git commit -m 0
git config --local receive.denyCurrentBranch updateInstead
cd ..
git clone server local
cd local
touch b
git add .
git commit -m 1
git push origin master:master
cd ../server
ls
আউটপুট:
a
b
গিটহাব ঘোষণায় এটিতে নিম্নোক্ত ত্রুটিগুলি রয়েছে :
তবে এই সমস্ত পয়েন্টগুলি গিতের বাইরে নয় এবং অবশ্যই বাহ্যিক কোডের দ্বারা যত্ন নেওয়া উচিত। সুতরাং সেই অর্থে, এটি, গিট হুকের সাথে একত্রে চূড়ান্ত সমাধান।
আপডেট: আমি এখন কী এজেন্টের সাথে লয়েড মুর সলিউশনটি ব্যবহার করছি ssh -A ...
। একটি প্রধান রেপোতে ধাক্কা দেওয়া এবং তারপরে আপনার সমস্ত মেশিনের সাথে সমান্তরালে এটিকে আঁকানো কিছুটা দ্রুত এবং সেই সমস্ত মেশিনগুলিতে কম সেটআপের প্রয়োজন।
এই সমাধানটি এখানে দেখছেন না। সার্ভারে গিট ইনস্টল করা থাকলে কেবল এসএসএসের মাধ্যমে চাপ দিন।
আপনার স্থানীয় .git / কনফিগারেশনে আপনাকে নীচের প্রবেশের প্রয়োজন হবে
[remote "amazon"]
url = amazon:/path/to/project.git
fetch = +refs/heads/*:refs/remotes/amazon/*
তবে আরে, ওটা কি amazon:
? আপনার স্থানীয় ~ / .ssh / কনফিগারেশনে আপনাকে নিম্নলিখিত এন্ট্রি যুক্ত করতে হবে:
Host amazon
Hostname <YOUR_IP>
User <USER>
IdentityFile ~/.ssh/amazon-private-key
এখন আপনি কল করতে পারেন
git push amazon master
ssh <USER>@<YOUR_IP> 'cd /path/to/project && git pull'
(বিটিডাব্লু: /পাথ / টো / প্রজেক্ট.git প্রকৃত কার্যকারী ডিরেক্টরি / পথ / থেকে / প্রকল্পের চেয়ে পৃথক)
আমাদের দৃশ্যে আমরা গিথুব / বিটবাকেটে কোডটি সংরক্ষণ করছি এবং লাইভ সার্ভারগুলিতে স্থাপন করতে চাই। এক্ষেত্রে নিম্নলিখিত সংমিশ্রণটি আমাদের জন্য কাজ করে (এটি এখানে উচ্চ upvated উত্তরের একটি রিমিক্স) :
.git
ডিরেক্টরিতে আপনার ওয়েব সার্ভারে অনুলিপি করুনgit remote add live ssh://user@host:port/folder
git config receive.denyCurrentBranch ignore
রিমোটে: nano .git/hooks/post-receive
এবং এই সামগ্রীটি যুক্ত করুন:
#!/bin/sh
GIT_WORK_TREE=/var/www/vhosts/example.org git checkout -f
রিমোটে: chmod +x .git/hooks/post-receive
git push live
যদি আপনার .git
ফোল্ডারটি নথির মূলের মধ্যে থাকে তবে নিশ্চিত করুন যে আপনি এটিকে .htaccess
( উত্স ) যোগ করে বাইরে থেকে আড়াল করেছেন :
RedirectMatch 404 /\..*$
মোতায়েন পরিচালনার জন্য আমরা ক্যাপিস্ট্রানো ব্যবহার করি । আমরা একটি মঞ্চ সার্ভারে স্থাপন করতে ক্যাপিস্ট্রানো তৈরি করি এবং তারপরে আমাদের সার্ভারের সাথে একটি আরএসসিএনসি চালাচ্ছি।
cap deploy
cap deploy:start_rsync (when the staging is ok)
ক্যাপিস্ট্রানো দিয়ে আমরা বাগের ক্ষেত্রে সহজ রোলব্যাক করতে পারি
cap deploy:rollback
cap deploy:start_rsync
গিডিপ হ'ল ভাষা- অজ্ঞাতনামা কেবলমাত্র জল-যোগ মাধ্যমে মোতায়েন স্বয়ংক্রিয় গিট হুক। এটি আপনাকে ওয়েব সার্ভার পুনরায় চালু করতে, ক্যাশে উষ্ণ করার জন্য কাস্টম স্টার্ট / স্টপ হুক রাখার অনুমতি দেয়
https://github.com/mpalmer/giddyup
পরীক্ষা করে দেখুন উদাহরণ ।
আপনার সার্ভারে দুটি কপি থাকা উচিত বলে মনে হচ্ছে। একটি খালি অনুলিপি, আপনি এটি থেকে ধাক্কা / টানতে পারবেন, যা আপনার কাজগুলি হয়ে যাওয়ার পরে আপনার পরিবর্তনগুলিকে ধাক্কা দেবে এবং তারপরে আপনি এটি ওয়েব ডিরেক্টরিতে ক্লোন করবেন এবং প্রতিদিন আপনার ওয়েব ডিরেক্টরি থেকে গিট পুল আপডেট করার জন্য একটি ক্রোনজ সেট আপ করবেন বা তাই।
আপনি সম্ভবত একটি গিট হুক সেট আপ করতে পারেন যে যখন "স্থিতিশীল" শাখাটি বলার জন্য কোনও কমিট করা হয় তা পরিবর্তনগুলি টানবে এবং সেগুলি পিএইচপি সাইটে প্রয়োগ করবে। বড় খারাপ দিকটি হ'ল কিছু ভুল হয়ে গেলে আপনার খুব বেশি নিয়ন্ত্রণ থাকবে না এবং এটি আপনার পরীক্ষায় সময় যোগ করবে - তবে আপনি নিজের ট্রাঙ্কটি শাখাকে স্থিতিশীল শাখায় মার্জ করার সময় কতটা কাজ জড়িত তা সম্পর্কে ধারণা পেতে পারেন know আপনি কতগুলি দ্বন্দ্বের মধ্যে পড়তে পারেন । আপনি কেবলমাত্র একটি সাইট চালানোর ইচ্ছা না রাখলে সাইট সুনির্দিষ্ট যে কোনও ফাইলের (যেমন, কনফিগারেশন ফাইলগুলি) নজরে রাখা গুরুত্বপূর্ণ হবে।
বিকল্পভাবে আপনি পরিবর্তে সাইটে পরিবর্তনের দিকে তাকিয়েছেন?
গিট হুক সম্পর্কিত তথ্যের জন্য গিথুকস ডকুমেন্টেশন দেখুন।
খ্রিস্টান সমাধান আমার গ্রহণ ।
git archive --prefix=deploy/ master | tar -x -C $TMPDIR | rsync $TMPDIR/deploy/ --copy-links -av username@server.com:/home/user/my_app && rm -rf $TMPDIR/deploy
আমি toroid.org দ্বারা নিম্নলিখিত সমাধানটি ব্যবহার করছি , যার একটি সহজ হুক স্ক্রিপ্ট রয়েছে।
সার্ভারে:
$ mkdir website.git && cd website.git
$ git init --bare
Initialized empty Git repository in /home/ams/website.git/
এবং সার্ভারে হুক ইনস্টল করুন:
$ mkdir /var/www/www.example.org
$ cat > hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f
GIT_WORK_TREE=/var/www/www git clean -f -d # clean directory from removed files
$ chmod +x hooks/post-receive
আপনার ক্লায়েন্ট উপর:
$ mkdir website && cd website
$ git init
Initialized empty Git repository in /home/ams/website/.git/
$ echo 'Hello, world!' > index.html
$ git add index.html
$ git commit -q -m "The humble beginnings of my web site."
$ git remote add web ssh://server.example.org/home/ams/website.git
$ git push web +master:refs/heads/master
তারপরে প্রকাশ করতে, কেবল টাইপ করুন
$ git push web
ওয়েবসাইটে সম্পূর্ণ বিবরণ রয়েছে: http://toroid.org/ams/git-website-howto
git push web +master:refs/heads/master
পরিবর্তে git push web master
?
পরিপূরক উত্তর হিসাবে আমি একটি বিকল্প প্রস্তাব করতে চাই। আমি গিট-এফটিপি ব্যবহার করছি এবং এটি ভাল কাজ করে।
https://github.com/git-ftp/git-ftp
ব্যবহারে সহজ, কেবল টাইপ করুন:
git ftp push
এবং গিটটি স্বয়ংক্রিয়ভাবে প্রকল্প ফাইলগুলি আপলোড করবে।
শুভেচ্ছা সহ
এমন এক পরিবেশ দেওয়া হয়েছে যেখানে আপনার একাধিক বিকাশকারী একই সংগ্রহস্থলটিতে অ্যাক্সেস করে নীচের নির্দেশিকাগুলি সহায়তা করতে পারে।
আপনার কাছে এমন একটি ইউনিক্স গোষ্ঠী রয়েছে তা নিশ্চিত করুন যে সমস্ত দেবগণ অন্তর্ভুক্ত রয়েছে এবং সেই গোষ্ঠীর .git সংগ্রহস্থলের মালিকানা দেয় give
সার্ভারের সংগ্রহস্থলের .git / কনফিগারেশনে শেয়ারডেপোসিটিরি = সত্য। (এটি কমিট এবং মোতায়েনের জন্য প্রয়োজনীয় একাধিক ব্যবহারকারীকে অনুমতি দেওয়ার জন্য গিটকে বলে।
প্রতিটি বাশার্ক ফাইলগুলিতে প্রতিটি ব্যবহারকারীর উমাস্ক সেট করুন - 002 একটি ভাল শুরু
আমি আমার নিজস্ব প্রাথমিক ডিপোরিয়াল সরঞ্জাম তৈরি করে শেষ করেছি যা রেপো থেকে স্বয়ংক্রিয়ভাবে নতুন আপডেটগুলি সরিয়ে ফেলবে - https://github.com/jesalg/SlimJim - মূলত এটি গিথাব পোস্ট-রিসিভ-হুক শোনায় এবং একটি ট্রিগার ব্যবহার করতে একটি প্রক্সি ব্যবহার করে স্ক্রিপ্ট আপডেট করুন।
পোস্ট-রিসিভ হুকের জন্য আমি দুটি সমাধান ব্যবহার করি:
সমাধান সমাধান 1
#!/bin/bash
# /git-repo/hooks/post-receive - file content on server (chmod as 755 to be executed)
# DEPLOY SOLUTION 1
export GIT_DIR=/git/repo-bare.git
export GIT_BRANCH1=master
export GIT_TARGET1=/var/www/html
export GIT_BRANCH2=dev
export GIT_TARGET2=/var/www/dev
echo "GIT DIR: $GIT_DIR/"
echo "GIT TARGET1: $GIT_TARGET1/"
echo "GIT BRANCH1: $GIT_BRANCH1/"
echo "GIT TARGET2: $GIT_TARGET2/"
echo "GIT BRANCH2: $GIT_BRANCH2/"
echo ""
cd $GIT_DIR/
while read oldrev newrev refname
do
branch=$(git rev-parse --abbrev-ref $refname)
BRANCH_REGEX='^${GIT_BRANCH1}.*$'
if [[ $branch =~ $BRANCH_REGEX ]] ; then
export GIT_WORK_TREE=$GIT_TARGET1/.
echo "Checking out branch: $branch";
echo "Checking out to workdir: $GIT_WORK_TREE";
git checkout -f $branch
fi
BRANCH_REGEX='^${GIT_BRANCH2}.*$'
if [[ $branch =~ $BRANCH_REGEX ]] ; then
export GIT_WORK_TREE=$GIT_TARGET2/.
echo "Checking out branch: $branch";
echo "Checking out to workdir: $GIT_WORK_TREE";
git checkout -f $branch
fi
done
সমাধান সমাধান 2
#!/bin/bash
# /git-repo/hooks/post-receive - file content on server (chmod as 755 to be executed)
# DEPLOY SOLUTION 2
export GIT_DIR=/git/repo-bare.git
export GIT_BRANCH1=master
export GIT_TARGET1=/var/www/html
export GIT_BRANCH2=dev
export GIT_TARGET2=/var/www/dev
export GIT_TEMP_DIR1=/tmp/deploy1
export GIT_TEMP_DIR2=/tmp/deploy2
echo "GIT DIR: $GIT_DIR/"
echo "GIT TARGET1: $GIT_TARGET1/"
echo "GIT BRANCH1: $GIT_BRANCH1/"
echo "GIT TARGET2: $GIT_TARGET2/"
echo "GIT BRANCH2: $GIT_BRANCH2/"
echo "GIT TEMP DIR1: $GIT_TEMP_DIR1/"
echo "GIT TEMP DIR2: $GIT_TEMP_DIR2/"
echo ""
cd $GIT_DIR/
while read oldrev newrev refname
do
branch=$(git rev-parse --abbrev-ref $refname)
BRANCH_REGEX='^${GIT_BRANCH1}.*$'
if [[ $branch =~ $BRANCH_REGEX ]] ; then
export GIT_WORK_TREE=$GIT_TARGET1/.
echo "Checking out branch: $branch";
echo "Checking out to workdir: $GIT_WORK_TREE";
# DEPLOY SOLUTION 2:
cd $GIT_DIR/; mkdir -p $GIT_TEMP_DIR1;
export GIT_WORK_TREE=$GIT_TEMP_DIR1/.
git checkout -f $branch
export GIT_WORK_TREE=$GIT_TARGET1/.
rsync $GIT_TEMP_DIR1/. -v -q --delete --delete-after -av $GIT_TARGET1/.
rm -rf $GIT_TEMP_DIR1
fi
BRANCH_REGEX='^${GIT_BRANCH2}.*$'
if [[ $branch =~ $BRANCH_REGEX ]] ; then
export GIT_WORK_TREE=$GIT_TARGET2/.
echo "Checking out branch: $branch";
echo "Checking out to workdir: $GIT_WORK_TREE";
# DEPLOY SOLUTION 2:
cd $GIT_DIR/; mkdir -p $GIT_TEMP_DIR2;
export GIT_WORK_TREE=$GIT_TEMP_DIR2/.
git checkout -f $branch
export GIT_WORK_TREE=$GIT_TARGET2/.
rsync $GIT_TEMP_DIR2/. -v -q --delete --delete-after -av $GIT_TARGET2/.
rm -rf $GIT_TEMP_DIR2
fi
done
উভয় সমাধান এই থ্রেডে বিদ্যমান পূর্ববর্তী সমাধানগুলির উপর ভিত্তি করে।
দ্রষ্টব্য, BRANCH_REGEX = '^ $ {GIT_BRANCH1}} 'মাস্টার ' বা "দেব *" স্ট্রিংয়ের সাথে মিলে যাওয়া শাখার নামগুলির জন্য fil 'ফিল্টারগুলি , এবং যদি ধাক্কা দেওয়া শাখাটি মেলে তবে কার্য গাছ স্থাপন করে। এটি বিভিন্ন জায়গায় ডেভ সংস্করণ এবং মাস্টার সংস্করণ স্থাপন করা সম্ভব করে তোলে।
ডিপলাই সলিউশন 1 কেবলমাত্র ফাইলগুলিকে সরায়, যা রেপুর অংশ, এবং প্রতিশ্রুতি দ্বারা সরানো হয়েছিল। এটি ডিপ্লোয়মেন্ট সলিউশন 2 এর চেয়ে দ্রুত।
ডিপলাই সলিউশন 2 এর সুবিধা রয়েছে যে এটি সার্ভার সাইডে যুক্ত হওয়া প্রযোজনা ডিরেক্টরি থেকে যে কোনও নতুন ফাইল সরিয়ে ফেলবে, এটি রেপোতে যুক্ত হয়েছিল কিনা তা বিবেচনা করেই নয়। এটি সর্বদা রেপোর ক্লিন ডুপেই থাকবে। এটি ডিপ্লোয়মেন্ট সলিউশন 1 এর চেয়ে ধীর।