উত্তর:
আমি মনে করি যে গিট অন ড্রপবক্স দুর্দান্ত। আমি সব সময় এটি ব্যবহার। আমার একাধিক কম্পিউটার রয়েছে (বাড়িতে দুটি এবং কর্মক্ষেত্রের দুটি) যা আমি ড্রপবক্সকে কেন্দ্রীয় বেয়ার সংগ্রহস্থল হিসাবে ব্যবহার করি। যেহেতু আমি এটি কোনও সরকারী পরিষেবাতে হোস্ট করতে চাই না এবং যে সার্ভারটিতে আমি সর্বদা এসশ করতে পারি সেটিতে আমার অ্যাক্সেস নেই, তাই ড্রপবক্স ব্যাকগ্রাউন্ডে সিঙ্ক করে (খুব দ্রুত) এটি যত্ন করে।
সেটআপ হ'ল এরকম কিছু:
~/project $ git init
~/project $ git add .
~/project $ git commit -m "first commit"
~/project $ cd ~/Dropbox/git
~/Dropbox/git $ git init --bare project.git
~/Dropbox/git $ cd ~/project
~/project $ git remote add origin ~/Dropbox/git/project.git
~/project $ git push -u origin master
সেখান থেকে, আপনি কেবল ক্লোন করতে পারেন ~/Dropbox/git/project.git
যে আপনি আপনার ড্রপবক্স অ্যাকাউন্টের সাথে যুক্ত করেছেন (বা এই ডিরেক্টরিটি লোকেদের সাথে ভাগ করেছেন), আপনি সমস্ত সাধারণ গিট অপারেশন করতে পারেন এবং সেগুলি আপনার অন্য সমস্ত মেশিনে স্বয়ংক্রিয়ভাবে সিঙ্ক্রোনাইজ হবে।
আমি আমার যুক্তি এবং আমি কীভাবে আমার পরিবেশটি স্থাপন করেছি সে সম্পর্কে ভার্সন কন্ট্রোলটিতে ( পুরানো লিঙ্কটি মৃত ) একটি ব্লগ পোস্ট লিখেছিলাম , এটি আমার রুবির অনিয়ন্ত্রিত বিকাশের অভিজ্ঞতার উপর ভিত্তি করে , তবে এটি যে কোনও কিছুর জন্য প্রয়োগ করা যেতে পারে, সত্যই।
এটি করার সঠিক উপায় হ'ল গিট-রিমোট-ড্রপবক্স: https://github.com/anishathalye/git-remote-rodbox
ড্রপবক্সে আপনার নিজের খালি রেপো তৈরি করা অনেক সমস্যার সৃষ্টি করে। আনিস (গ্রন্থাগারের স্রষ্টা) এটিকে সর্বোত্তমভাবে ব্যাখ্যা করেছেন :
এই সমস্যার মূল কারণ হ'ল ড্রপবক্স ডেস্কটপ ক্লায়েন্টটি গিট সংগ্রহস্থল নয়, ফাইল সিঙ্ক করার জন্য তৈরি করা হয়েছে। গিট সংগ্রহস্থলগুলির জন্য বিশেষ পরিচালনা ছাড়া এটি গিটের মতো একই গ্যারান্টি বজায় রাখে না। দূরবর্তী সংগ্রহস্থলগুলির অপারেশনগুলি এখন আর পারমাণবিক নয় এবং সমকালীন ক্রিয়াকলাপগুলি বা সিঙ্ক্রোনাইজেশনের সাথে দুর্ভাগ্যজনক সময়গুলির ফলে ক্ষতিগ্রস্থ সংগ্রহস্থল হতে পারে।
এই কাজটি সঠিকভাবে করার জন্য Traতিহ্যবাহী গিট সার্ভার সাইডে রান কোডটি রিমোট করে, তবে আমরা এটি করতে পারি না।
সমাধান: এটি সঠিকভাবে সমাধান করা সম্ভব। গিট উইথ ড্রপবক্স ব্যবহার করা এবং safetyতিহ্যবাহী গিট রিমোট হিসাবে একই সুরক্ষা এবং ধারাবাহিকতা গ্যারান্টি থাকতে পারে, এমনকি সেখানে একাধিক ব্যবহারকারী এবং একযোগে কাজ করা হয়!
ব্যবহারকারীর পক্ষে এটি গিট-রিমোট-ড্রপবক্স, গিট দূরবর্তী সহায়ক যা গিট এবং ড্রপবক্সের মধ্যে স্বচ্ছ দ্বি-নির্দেশমূলক সেতু হিসাবে কাজ করে এবং একটি traditionalতিহ্যবাহী গিট রিমোটের সমস্ত গ্যারান্টি বজায় রাখার মতোই সহজ। এটি ভাগ করা ফোল্ডারগুলির সাথে ব্যবহার করা এমনকি নিরাপদ, তাই এটি সহযোগিতার জন্য ব্যবহার করা যেতে পারে (সীমিত সীমাহীন সহযোগীদের সাথে সীমাহীন ব্যক্তিগত রেপো!)।
রিমোট সহায়ক দ্বারা, ড্রপবক্সকে গিট রিমোট হিসাবে ব্যবহার করা এবং গিট ক্লোন, গিট টান এবং গিট পুশের মতো নিয়মিত সমস্ত গিট কমান্ড ব্যবহার করা সম্ভব এবং প্রত্যাশা অনুযায়ী সবকিছুই কাজ করবে।
এই উত্তরটি গিট নয়, মার্কুরিয়াল অভিজ্ঞতার উপর ভিত্তি করে তৈরি হয়েছে , তবে এই অভিজ্ঞতাটি বলেছে যে ড্রপবক্সটি ব্যবহার করে এইভাবে দুর্নীতিবাজ সংগ্রহস্থলগুলির জন্য জিজ্ঞাসা করা হচ্ছে যদি আপনি এমনকি বিভিন্ন সময়ে বিভিন্ন মেশিন থেকে একই ড্রপবক্স-ভিত্তিক ভান্ডার আপডেট করে যাবেন (ম্যাক, ইউনিক্স, আমার ক্ষেত্রে উইন্ডোজ)।
আমার যে ভুল হতে পারে তার সম্পূর্ণ তালিকা নেই, তবে এখানে একটি নির্দিষ্ট উদাহরণ যা আমাকে বিট দেয়। প্রতিটি মেশিনের লাইন-এন্ডিং অক্ষরগুলির নিজস্ব ধারণা থাকে এবং ফাইলের নামে কীভাবে উচ্চ / নিম্নের অক্ষরগুলি পরিচালনা করা হয়। ড্রপবক্স এবং গিট / মার্কুরিয়াল এটিকে কিছুটা ভিন্নভাবে হ্যান্ডেল করে (সঠিক পার্থক্য আমি মনে করি না)। যদি ড্রপবক্স গিট / মার্কুরিয়ালের পিছনে, প্রেস্টো, ভাঙ্গা ভাণ্ডারের পিছনে সংগ্রহস্থল আপডেট করে। এটি তাত্ক্ষণিকভাবে এবং অদৃশ্যভাবে ঘটে থাকে, তাই আপনি এমনকি জেনে থাকবেন না যতক্ষণ না আপনি এটি থেকে কিছু পুনরুদ্ধার করার চেষ্টা করবেন আপনার ভাণ্ডারটি ভাঙ্গা।
এইভাবে জিনিসগুলি করে কোনও জগাখিচুড়ি থেকে খনন করার পরে, আমি নিখুঁত সাফল্যের সাথে নীচের রেসিপিটি ব্যবহার করেছি এবং সমস্যার কোনও চিহ্ন নেই। ড্রপবক্সের বাইরে কেবল আপনার সংগ্রহশালাটি সরান। অন্য সব কিছুর জন্য ড্রপবক্স ব্যবহার করুন; ডকুমেন্টেশন, জার ফাইলগুলি , আপনি দয়া করে কিছু করুন anything এবং সংগ্রহস্থলটি নিজে পরিচালনা করতে গিটহাব (গিট) বা বিটবকেট ( মার্কিউরিয়াল ) ব্যবহার করুন । উভয়ই নিখরচায় তাই এটি ব্যয়গুলিতে কিছুই যোগ করে না এবং প্রতিটি সরঞ্জাম এখন এর শক্তিতে খেলে।
ড্রপবক্সের শীর্ষে গিট / মার্কুরিয়াল চালানো ঝুঁকি ছাড়া কিছুই যুক্ত করে না। এটা করবেন না।
ড্রপবক্স ব্যবহার করে ছোট দলগুলির প্রতি শ্রদ্ধা সহ:
ড্রপবক্সে যদি প্রতিটি বিকাশকারীর নিজস্ব লিখনযোগ্য খালি সংগ্রহস্থান থাকে, যা কেবল অন্য বিকাশকারীদের কাছে টান হয়, তবে এটি দুর্নীতির ঝুঁকি ছাড়াই কোড ভাগ করে নেওয়ার সুবিধার্থে!
তারপরে আপনি যদি কেন্দ্রিয়ায়িত 'মাইনলাইন' চান, আপনি একজন বিকাশকারীকে তার নিজের রেপো থেকে সমস্ত ধাক্কা সামলে নিতে পারেন।
আমি আমার সমস্ত প্রকল্পগুলিকে একটি গিট সংগ্রহস্থলের অধীনে রাখতে চাইনি, বা প্রতিটি প্রকল্পের জন্য আমি এই কোডটি চালিয়ে যেতে চাইনি, তাই আমি একটি বাশ স্ক্রিপ্ট তৈরি করেছি যা প্রক্রিয়াটি স্বয়ংক্রিয় করবে will আপনি এটি এক বা একাধিক ডিরেক্টরিতে ব্যবহার করতে পারেন - সুতরাং এটি আপনার জন্য এই পোস্টের কোডটি করতে পারে বা একসাথে একাধিক প্রকল্পে এটি করতে পারে।
#!/bin/sh
# Script by Eli Delventhal
# Creates Git projects for file folders by making the origin Dropbox. You will need to install Dropbox for this to work.
# Not enough parameters, show help.
if [ $# -lt 1 ] ; then
cat<<HELP
projects_to_git.sh -- Takes a project folder and creates a Git repository for it on Dropbox
USAGE:
./projects_to_git.sh file1 file2 ..
EXAMPLES:
./projects_to_git.sh path/to/MyProjectDir
Creates a git project called MyProjectDir on Dropbox
./projects_to_git.sh path/to/workspace/*
Creates a git project on Dropbox for every folder contained within the workspace directory, where the project name matches the folder name
HELP
exit 0
fi
# We have enough parameters, so let's actually do this thing.
START_DIR=$(pwd)
# Make sure we have a connection to Dropbox
cd ~
if [ -s 'Dropbox' ] ; then
echo "Found Dropbox directory."
cd Dropbox
if [ -s 'git' ] ; then
echo " Dropbox Git directory found."
else
echo " Dropbox Git directory created."
mkdir git
fi
else
echo "You do not have a Dropbox folder at ~/Dropbox! Install Dropbox. Aborting..."
exit 0
fi
# Process all directories matching the passed parameters.
echo "Starting processing for all files..."
for PROJ in $*
do
if [ -d $PROJ ] ; then
PROJNAME=$(basename $PROJ)
echo " Processing $PROJNAME..."
# Enable Git with this project.
cd $PROJ
if [ -s '.git' ] ; then
echo " $PROJNAME is already a Git repository, ignoring..."
else
echo " Initializing Git for $PROJNAME..."
git init -q
git add .
git commit -m "Initial creation of project." -q
# Make the origin Dropbox.
cd ~/Dropbox/git
if [ -s $PROJNAME ] ; then
echo " Warning! $PROJNAME already exists in Git! Ignoring..."
else
echo " Putting $PROJNAME project on Dropbox..."
mkdir $PROJNAME
cd $PROJNAME
git init -q --bare
fi
# Link the project to the origin
echo " Copying local $PROJNAME to Dropbox..."
cd $PROJ
git remote add origin "~/Dropbox/git/$PROJNAME"
git push -q origin master
git branch --set-upstream master origin/master
fi
fi
done
echo "Done processing all files."
cd $START_DIR
আমি মনে করি না যে গিট এবং ড্রপবক্স ব্যবহার করার উপায় ... কেবল দুজনের বৈশিষ্ট্য সম্পর্কে চিন্তা করুন:
git:
ড্রপবক্স:
এবং আপনি যদি আপনার কয়েকটি ফাইল ভাগ করে নিয়ে চিন্তিত হন তবে সেগুলি কেন সিফার করবেন না? এবং তারপরে আপনি গিট থেকে ড্রপবক্সের সবচেয়ে বড় সুবিধা পেতে পারেন, তা হল, সরকারী এবং ব্যক্তিগত ফাইল থাকা ...
এটি এখন 2015, এবং তিন দিন আগে, ড্রপবক্সে গিট নিরাপদে ব্যবহার করার জন্য ড্রপবক্স এপিআই ভি 2 এর উপর ভিত্তি করে একটি নতুন সরঞ্জাম তৈরি করা হয়েছে। এটি ডেস্কটপ ক্লায়েন্ট ব্যবহার না করে API এর বিপরীতে কাজ করে এবং একটি ভাগ করা ফোল্ডারে হোস্ট করা একটি সংগ্রহস্থলে এক সাথে একাধিক যুগপত পুশগুলি সঠিকভাবে পরিচালনা করে।
একবার কনফিগার হয়ে গেলে এটি অন্য গিট রিমোটের মতোই গিট রিমোট সেটআপ করতে দেয়।
git clone "dropbox::/path/to/repo"
git remote add origin "dropbox::/path/to/repo"
এনক্রিপ্ট করা দূরবর্তী ব্যাকআপগুলির জন্য আমি মার্চুরিয়াল (বা গিট) + ট্রুক্রিপট + ড্রপবক্স ব্যবহার করি ।
দুর্দান্ত জিনিস হ'ল আপনি যদি আপনার কোডের একটি ছোট অংশ পরিবর্তন করেন তবে ড্রপবক্স পুরো ট্রুক্রিপট কনটেইনারটিকে সিঙ্ক করে না। সিঙ্কের সময়টি পরিবর্তনের পরিমাণের সাথে আনুপাতিক। এটি এনক্রিপ্ট হওয়া সত্ত্বেও, ট্রুক্রিপট + ড্রপবক্সের সংমিশ্রণটি ব্লক সাইফার + ব্লক স্তর স্তর সিঙ্কের দুর্দান্ত ব্যবহার করে।
দ্বিতীয়ত, একঘেয়েমি এনক্রিপ্ট হওয়া ধারকটি কেবল সুরক্ষা যোগ করে না, এটি সংগ্রহস্থলের দুর্নীতির সম্ভাবনাও হ্রাস করে ।
সতর্কতা: তবে ড্রপবক্স চলাকালীন আপনাকে ধারকটি না বসানো সম্পর্কে খুব সাবধানতা অবলম্বন করতে হবে। 2 টি পৃথক ক্লায়েন্ট যদি বিভিন্ন ধারককে ধারকটিতে চেক-ইন করে তবে দ্বন্দ্বগুলি সমাধান করার জন্যও এটি ব্যথা হতে পারে। সুতরাং, এটি কেবলমাত্র কোনও একক ব্যক্তির পক্ষে এটি ব্যাকআপের জন্য ব্যবহার করা, কোনও দলের জন্য নয় practical
সেটআপ:
preserve modification timestamp
* নির্বাচন না করে চেক করুন।ব্যবহার:
PS টি preserve modification timestamp
ড্রপবক্সটি আনচেক করে ফাইলটি সংশোধন করা হয়েছে এবং এটি সিঙ্ক করা উচিত। নোট করুন যে ধারকটি মাউন্ট করলে আপনি এতে কোনও ফাইল পরিবর্তন না করলেও টাইমস্ট্যাম্পটি পরিবর্তন করে। যদি আপনি এটি না চান তবে কেবলমাত্র ভলিউমটিকে মাউন্ট করুনread-only
আমি ড্যান ম্যাকনেভিনের উত্তরটি পছন্দ করি! আমি এখন গিট এবং ড্রপবক্স একসাথে ব্যবহার করছি এবং আমি আমার .বাশ_প্রফাইলে বেশ কয়েকটি এলিয়াস ব্যবহার করছি যাতে আমার কর্মপ্রবাহটি দেখতে দেখতে:
~/project $ git init
~/project $ git add .
~/project $ gcam "first commit"
~/project $ git-dropbox
এগুলি আমার উপনাম:
alias gcam='git commit -a -m'
alias gpom='git push origin master'
alias gra='git remote add origin'
alias git-dropbox='TMPGP=~/Dropbox/git/$(pwd | awk -F/ '\''{print $NF}'\'').git;mkdir -p $TMPGP && (cd $TMPGP; git init --bare) && gra $TMPGP && gpom'
আমরা একটি শেয়ার ফোল্ডারে এই পদ্ধতিটি (ড্রপবক্সে একটি খালি সংগ্রহস্থান তৈরি) ব্যবহার করি ।
একটি ছোট্ট বিকাশকারীগণ সেই খালি সিঙ্ক হওয়া ভাণ্ডার থেকে টানতে এবং স্থানীয় ক্লোন তৈরি করতে পারে। কাজের ইউনিটটি শেষ হয়ে গেলে আমরা আবার উত্সকে এগিয়ে নিয়ে যাই।
আমি যে জিনিসটি মিস করছি তা হ'ল একবার উত্সারের দিকে ধাক্কা পড়লে পরিবর্তন-সেট তথ্যের সাথে একটি ইমেল প্রেরণের ভাল উপায়। আমরা ম্যানুয়ালি পরিবর্তনের উপর নজর রাখতে গুগল ওয়েভ ব্যবহার করছি।
আমি প্রস্তাবিত পদ্ধতিতে মার্কুরিয়াল ব্যবহার করছি এবং অনুরোধ করছি যে আপনি সতর্ক হন, বিশেষত যদি কোনও মেশিনের মধ্যে পার্থক্য থাকে। ড্রপবক্স ফোরা স্বতঃস্ফূর্তভাবে আপ হয়ে যাওয়া রহস্যজনক ফাইলনামের সমস্যার অভিযোগে পূর্ণ। এইচজি (এবং আমি অনুমান করি গিট) রুটিন চেকিনগুলির সময় খেয়াল বা অভিযোগ করবে না এবং আপনি যখন দুর্নীতিগ্রস্থ রেপোটির অভিযোগ করবেন তখনই আপনি দুর্নীতির বিষয়ে শুনবেন যখন আপনি এটি বাস্তবের জন্য ব্যবহার করার চেষ্টা করবেন। খারাপ সংবাদ. আমি যদি সমস্যা এবং এর কার্যকারিতা সম্পর্কে আরও নির্দিষ্ট করে বলতে পারি; আমি এখনও এই জগাখিচুড়ি থেকে নিজেকে বের করার চেষ্টা করছি।
এছাড়াও একটি ওপেন সোর্স প্রকল্প রয়েছে (ক্রস প্ল্যাটফর্মের একটি সংকলন [লিনাক্স, ম্যাক, উইন] স্ক্রিপ্টস) যা মুষ্টিমেয় কমান্ডের (৩-৪) সাহায্যে সংগ্রহস্থল পরিচালনার সমস্ত কৌতুকপূর্ণ বিবরণ দেয়।
https://github.com/karalabe/gitbox/wiki
নমুনা ব্যবহার হ'ল:
$ gitbox create myapp
Creating empty repository...
Initializing new repository...
Repository successfully created.
$ gitbox clone myapp
Cloning repository...
Repository successfully cloned.
যার পরে স্বাভাবিক গিট ব্যবহার:
$ echo “Some change” > somefile.txt
$ git add somefile.txt
$ git commit –m “Created some file”
$ git push
পূর্ণ কমান্ড রেফারেন্স এবং টিউটোরিয়ালগুলির জন্য প্রকল্প উইকি এবং ম্যানুয়ালগুলি দেখুন।
আমি আমার অ-গিথুব রেপো ড্রপবক্সে সঞ্চয় করি। আমি যে সতর্কতার মধ্যে দৌড়েছি তা পুনরায় ইনস্টলের পরে সিঙ্ক হচ্ছে। ড্রপবক্স বড় ফাইলগুলিতে যাওয়ার আগে প্রথমে ক্ষুদ্রতম ফাইলগুলি ডাউনলোড করবে। আপনি যদি রাত্রে শুরু করেন এবং উইকএন্ডের পরে ফিরে আসেন তবে কোনও সমস্যা নয় :-)
আমার থ্রেড - http://forums.dropbox.com/topic.php?id=29984&replies=6
এখন ২০১৪ সালে, আমি সমস্যা ছাড়াই প্রায় দেড় বছর ধরে গিট এবং ড্রপবক্স ব্যবহার করে আসছি। কিছু বিষয় যদিও:
git push
রিমোট রিপোজিটরিতে ঠেলাঠেলি করে, যাতে এটি যদি কখনও দুর্নীতিগ্রস্থ হয় তবে আমি সহজেই এটি পুনরুদ্ধার করতে পারি।C:\Users
সঙ্গে mklink /D link target
কারণ কিছু লাইব্রেরি পরম অবস্থানে উল্লেখ করা হয়েছে।আমি ড্যান ম্যাকনেভিনের শীর্ষ ভোটের উত্তরটি পছন্দ করি। আমি অনেক বার গিট কমান্ডের ক্রম শেষ করে স্ক্রিপ্ট তৈরির সিদ্ধান্ত নিয়েছি। সুতরাং এটি এখানে:
#!/bin/bash
# Usage
usage() {
echo "Usage: ${0} -m [ master-branch-directory ] -r [ remote-branch-directory ] [ project-name ]"
exit 1
}
# Defaults
defaults() {
masterdir="${HOME}/Dropbox/git"
remotedir="${PWD}"
gitignorefile="# OS generated files #\n\n.DS_Store\n.DS_Store?\n.Spotlight-V100\n.Trashes\nehthumbs.db\nThumbs.db"
}
# Check if no arguments
if [ ${#} -eq 0 ] ; then
echo "Error: No arguments specified"
usage
fi
#Set defaults
defaults
# Parse arguments
while [ ${#} -ge 1 ]; do
case "${1}" in
'-h' | '--help' ) usage ;;
'-m' )
shift
masterdir="${1}"
;;
'-r' )
shift
remotedir="${1}"
;;
* )
projectname="${1##*/}"
projectname="${projectname%.git}.git"
;;
esac
shift
done
# check if specified directories and project name exists
if [ -z "${projectname}" ]; then
echo "Error: Project name not specified"
usage
fi
if [ ! -d "${remotedir}" ]; then
echo "Error: Remote directory ${remotedir} does not exist"
usage
fi
if [ ! -d "${masterdir}" ]; then
echo "Error: Master directory ${masterdir} does not exist"
usage
fi
#absolute paths
remotedir="`( cd \"${remotedir}\" && pwd )`"
masterdir="`( cd \"${masterdir}\" && pwd )`"
#Make master git repository
cd "${masterdir}"
git init --bare "${projectname}"
#make local repository and push to master
cd "${remotedir}"
echo -e "${gitignorefile}" > .gitignore # default .gitignore file
git init
git add .
git commit -m "first commit"
git remote add origin "${masterdir}/${projectname}"
git push -u origin master
#done
echo "----- Locations -----"
echo "Remote branch location: ${remotedir}"
echo "Master branch location: ${masterdir}"
echo "Project Name: ${projectname}"
স্ক্রিপ্টটির জন্য কেবলমাত্র একটি প্রকল্পের নাম প্রয়োজন। এটি একটি গিট সংগ্রহস্থল তৈরি করবে~/Dropbox/git/
নির্দিষ্ট নামের অধীনে করবে এবং বর্তমান ডিরেক্টরিটির সম্পূর্ণ বিষয়বস্তুকে সদ্য নির্মিত উত্সের মাস্টার শাখায় ঠেলে দেবে। যদি একাধিক প্রকল্পের নাম দেওয়া হয় তবে ডান-সর্বাধিক প্রকল্পের নাম যুক্তি ব্যবহার করা হবে।
Allyচ্ছিকভাবে, -r কমান্ড আর্গুমেন্টটি দূরবর্তী শাখাটি নির্দিষ্ট করে যা মূল মাস্টারকে চাপ দেবে। প্রকল্প উত্স মাস্টার এর অবস্থান -M যুক্তি দিয়েও নির্দিষ্ট করা যেতে পারে। ডিফল্ট .gitignore ফাইলটি দূরবর্তী শাখা ডিরেক্টরিতেও স্থাপন করা হয়। ডিরেক্টরি এবং .gitignore ফাইল ডিফল্ট স্ক্রিপ্টে নির্দিষ্ট করা হয়।
অন্য পদ্ধতি:
@ ড্যান উত্তর সহ এখন পর্যন্ত সমস্ত উত্তর যা সর্বাধিক জনপ্রিয় করে একটি পরিষেবা ব্যবহার করার পরিবর্তে একটি ভাগ করা সংগ্রহস্থলকে কেন্দ্রীভূত করতে ড্রপবক্স ব্যবহার করার ধারণাকে করুন
তবে, যেহেতু মূল প্রশ্নটি "গিট এবং ড্রপবক্স একসাথে কার্যকরভাবে" ব্যবহার করার অর্থ কী তা নির্দিষ্ট করে না, আসুন আরেকটি পদ্ধতির উপর কাজ করা যাক: "ড্রপবক্স ব্যবহার করে কেবলমাত্র ওয়ার্কট্রি সিঙ্ক করতে" "
কীভাবে এই পদক্ষেপগুলি রয়েছে:
প্রকল্প ডিরেক্টরিতে একটি খালি .git
ডিরেক্টরি তৈরি করে (যেমন mkdir -p myproject/.git
)
.git
ড্রপবক্সে ডিরেক্টরি আন-সিঙ্ক করুন । যদি ড্রপবক্স অ্যাপ্লিকেশন ব্যবহার করে: পছন্দগুলি, সিঙ্কে যান এবং "সিঙ্ক করতে ফোল্ডারগুলি চয়ন করুন" তে যান, যেখানে .git
ডিরেক্টরিটি চিহ্নমুক্ত করা দরকার। এটি .git
ডিরেক্টরিটি সরিয়ে ফেলবে ।
git init
প্রকল্প ডিরেক্টরিতে চালান
এটি .git
ইতিমধ্যে বিদ্যমান থাকলে এটি কাজ করে , তবে কেবল পদক্ষেপ 2 করুন D ড্রপবক্স যদিও ওয়েবসাইটটিতে গিট ফাইলগুলির একটি অনুলিপি রাখবে।
দ্বিতীয় ধাপ ড্রপবক্সকে গিট সিস্টেম কাঠামো সিঙ্ক না করার কারণ করবে, যা এই পদ্ধতির জন্য পছন্দসই ফলাফল।
কেন কেউ এই পদ্ধতি ব্যবহার করবে?
এখনও-না-ধাক্কা দেওয়া পরিবর্তনের একটি ড্রপবক্স ব্যাকআপ থাকবে এবং সেগুলি ডিভাইসগুলির মধ্যে সিঙ্ক হবে।
ডিভাইসগুলির মধ্যে সিঙ্ক করার সময় ড্রপবক্সে কোনও কিছু স্ক্রু আপ হয়ে যায় git status
এবং git diff
জিনিসগুলি বাছাই করতে সুবিধা হবে।
এটি ড্রপবক্স অ্যাকাউন্টে স্থান বাঁচায় (পুরো ইতিহাস সেখানে সংরক্ষণ করা হবে না)
এটি @ ডাবের উত্তরের মন্তব্যে @ ডুবেক এবং @ এটসের উত্থাপিত উদ্বেগ এবং অন্য উত্তরে @ ক্লু দ্বারা উদ্বেগগুলি এড়িয়ে চলেছে ।
অন্য কোথাও রিমোটের অস্তিত্ব (গিথুব ইত্যাদি) এই পদ্ধতির সাথে ভাল কাজ করবে।
বিভিন্ন শাখায় কাজ করা কিছু বিষয় নিয়ে আসে, সেগুলির যত্ন নেওয়া দরকার:
একটি সম্ভাব্য সমস্যা হ'ল ড্রপবক্স (অকারণে?) যখন বিভিন্ন শাখা পরীক্ষা করে দেখেন তখন সম্ভাব্য অনেকগুলি ফাইল সিঙ্ক করে।
যদি দুই বা ততোধিক ড্রপবক্স সিঙ্ক হওয়া ডিভাইসের বিভিন্ন শাখা পরীক্ষা করা থাকে তবে উভয় ডিভাইসে অ-প্রতিশ্রুতিবদ্ধ পরিবর্তনগুলি হারাতে পারে,
এই সমস্যাগুলির চারপাশের একটি উপায় হ'ল git worktree
শাখা চেকআউটগুলি পৃথক ডিরেক্টরিতে রেখে দেওয়া।
xattr -w com.dropbox.ignored 1 /path/to/somewhere
,।
আমার 2 সেন্টের জন্য ড্রপবক্স কেবলমাত্র ব্যক্তিগত ব্যবহারের জন্য সেন্স তৈরি করে যেখানে আপনি কোনও কেন্দ্রীয় রেপো হোস্ট পেতে বিরক্ত করতে চান না। যে কোনও পেশাদার বিকাশের জন্য আপনি সম্ভবত সমাধানের চেয়ে আরও সমস্যা তৈরি করবেন, যেমন থ্রেডে ইতিমধ্যে বেশ কয়েকবার উল্লেখ করা হয়েছে, ড্রপবক্স এই ব্যবহারের ক্ষেত্রে তৈরি করা হয়নি। এটি বলেছে যে, কোনও তৃতীয় পক্ষের প্লাগইন বা সরঞ্জাম ছাড়াই ড্রপবক্সে সংগ্রহস্থল ডাম্প করার জন্য একটি সম্পূর্ণ নিরাপদ পদ্ধতি হ'ল বান্ডিলগুলি ব্যবহার করা। .gitconfig
টাইপিং সংরক্ষণ করার জন্য আমার কাছে নিম্নলিখিত উপাধি রয়েছে :
[alias]
bundle-push = "!cd \"${GIT_PREFIX:-.}\" && if path=\"$(git config remote.\"$1\".url)\" && [ \"${path:0:1}\" = / ]; then git bundle create \"$path\" --all && git fetch \"$1\"; else echo \"Not a bundle remote\"; exit 1; fi #"
bundle-fetch = "!cd \"${GIT_PREFIX:-.}\" && if path=\"$(git config remote.\"$1\".url)\" && [ \"${path:0:1}\" = / ]; then git bundle verify \"$path\" && git fetch \"$1\"; else echo \"Not a bundle remote\"; exit 1; fi #"
bundle-new = "!cd \"${GIT_PREFIX:-.}\" && if [ -z \"${1:-}\" -o -z \"${2:-}\" ]; then echo \"Usage: git bundle-new <file> <remote name>\"; exit 1; elif [ -e \"$2\" ]; then echo \"File exist\"; exit 1; else git bundle create \"$2\" --all && git remote add -f \"$1\" \"$(realpath \"$2\")\"; fi #"
উদাহরণ:
# Create bundle remote (in local repo)
$ git bundle-new dropbox ~/Dropbox/my-repo.bundle
# Fetch updates from dropbox
$ git bundle-fetch dropbox
# NOTE: writes over previous bundle. Thus, roughly equivalent to push --force --prune --all
$ git bundle-push
আমি একই ধরণের সমস্যার মুখোমুখি হয়েছি এবং এর জন্য একটি ছোট স্ক্রিপ্ট তৈরি করেছি। ধারণাটি হ'ল যতটা সম্ভব গিট সহ ড্রপবক্স ব্যবহার করা। বর্তমানে আমি রুবি কোডটি দ্রুত প্রয়োগ করেছি এবং শীঘ্রই আমি আরও যুক্ত করব।
স্ক্রিপ্টটি অ্যাক্সেসযোগ্য https://github.com/nuttylabs/box-git
।
তৃতীয় পক্ষের সংহতকরণ সরঞ্জামগুলি ব্যবহার না করেই আমি পরিস্থিতিটি কিছুটা বাড়িয়ে তুলতে এবং ড্রপবক্স এবং অন্যান্য অনুরূপ ক্লাউড ডিস্ক পরিষেবাগুলি যেমন গিট সহ স্পাইডারওক ব্যবহার করতে পারি।
লক্ষ্যটি হ'ল এই ফাইলগুলির সংশোধনগুলির মাঝখানে সিঙ্ক্রোনাইজেশন এড়ানো, কারণ এটি একটি আংশিক অবস্থা আপলোড করতে পারে এবং এটি আবার ডাউনলোড করবে, আপনার গিটের অবস্থা সম্পূর্ণরূপে কলুষিত করে।
এই সমস্যাটি এড়াতে, আমি তা করেছি:
git bundle create my_repo.git --all
।এটি নিখুঁত নয় কারণ কোনও গ্যারান্টি নেই এটি গিটের অবস্থাটি আবার গোলমেলে ফেলবে না, তবে এটি সহায়তা করে এবং এই মুহুর্তের জন্য আমি কোনও সমস্যা পাইনি।
ম্যাকওএসে আপনি কেবল ড্রপবক্স বন্ধ করতে পারেন, আপনার পরিবর্তনগুলি করুন এবং তারপরে ড্রপবক্সটি আবার চালু করতে পারেন। আমি নিম্নলিখিত সংমিশ্রণটি ব্যবহার করছি এবং এটিতে বেশ খুশি:
উভয়টিতে (আপনার স্থানীয় গিট পরিচালিত প্রকল্প ডিরেক্টরি এবং ড্রপবক্সে অবস্থিত আপনার দূরবর্তী গিট সংগ্রহস্থল) অটো-প্যাকিং নিষ্ক্রিয় করতে নিম্নলিখিত কমান্ডটি চালান (যা ড্রপবক্স সিঙ্ক করার ক্ষেত্রে প্রধান সমস্যা)
git config --global gc.auto 0
তারপরে সময়ে সময়ে, ড্রপবক্স অক্ষমযুক্ত সংগ্রহগুলি সংকুচিত করুন। উদাহরণস্বরূপ আমি যখনই আমার অ্যাপ্লিকেশনগুলিতে নতুন প্রকাশ করি তখন আমার বাশ-বিল্ড-স্ক্রিপ্টে নিম্নলিখিতগুলি করি।
osascript -e "tell application \"Dropbox\" to quit"
# Compress local
git gc --prune=now; git repack -a -d
# Compress remote
REPOS_DIR_REMOTE=`git remote get-url --push origin`
cd "${REPOS_DIR_REMOTE}"
git gc --prune=now; git repack -a -d
osascript -e "tell application \"Dropbox\" to launch"
osascript -e "display notification with title \"Compress Done\""