जवाबों:
मुझे लगता है कि ड्रॉपबॉक्स पर गिट महान है। मैं हर समय इसका इस्तेमाल करता हूं। मेरे पास कई कंप्यूटर हैं (दो घर पर और एक काम पर) जो मैं ड्रॉपबॉक्स को केंद्रीय नंगे भंडार के रूप में उपयोग करता हूं। चूंकि मैं इसे एक सार्वजनिक सेवा पर होस्ट नहीं करना चाहता हूं, और मेरे पास एक सर्वर तक पहुंच नहीं है जिसे मैं हमेशा से बचा सकता हूं, ड्रॉपबॉक्स पृष्ठभूमि में सिंक (बहुत जल्दी) द्वारा इसका ख्याल रखता है।
सेटअप कुछ इस प्रकार है:
~/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
बॉक्स खाते (या इस निर्देशिका को लोगों के साथ साझा कर सकते हैं) के साथ संबद्ध कर सकते हैं, आप सभी सामान्य गिट संचालन कर सकते हैं और वे स्वचालित रूप से आपके सभी अन्य मशीनों के साथ सिंक्रनाइज़ हो जाएंगे।
मैंने अपने तर्क पर एक ब्लॉग पोस्ट, ऑन वर्जन कंट्रोल , ( पुराना लिंक डेड ) लिखा है और मैंने अपना वातावरण कैसे सेट किया, यह मेरे रूबी के रेल विकास अनुभव पर आधारित है, लेकिन इसे कुछ भी, वास्तव में लागू किया जा सकता है।
इसे करने का सही तरीका git-Remote-dropbox का उपयोग है: https://github.com/anishathalye/git-remote-dropbox
ड्रॉपबॉक्स में अपने खुद के नंगे रेपो बनाने से बहुत सारी समस्याएं होती हैं। अनीश (पुस्तकालय के निर्माता) इसे सबसे अच्छा बताते हैं :
इन समस्याओं का मूल कारण यह है कि ड्रॉपबॉक्स डेस्कटॉप क्लाइंट को फाइल को सिंक करने के लिए बनाया गया है, न कि गिट रिपोजिटरी में। Git रिपॉजिटरी के लिए विशेष हैंडलिंग के बिना, यह Git जैसी ही गारंटी नहीं रखता है। दूरस्थ रिपॉजिटरी पर संचालन अब परमाणु नहीं है, और समवर्ती संचालन या सिंक्रनाइज़ेशन के साथ अशुभ समय के परिणामस्वरूप दूषित रिपॉजिटरी हो सकती है।
पारंपरिक गिट इस काम को ठीक से करने के लिए सर्वर साइड पर रन कोड को रिमूव करता है, लेकिन हम ऐसा नहीं कर सकते।
समाधान: इसे ठीक से हल करना संभव है। ड्रॉपबॉक्स के साथ Git का उपयोग करना संभव है और पारंपरिक Git रिमोट के रूप में समान सुरक्षा और स्थिरता की गारंटी है, तब भी जब कई उपयोगकर्ता और समवर्ती संचालन होते हैं!
एक उपयोगकर्ता के लिए, यह गिट-रिमोट-ड्रॉपबॉक्स का उपयोग करने के रूप में सरल है, एक गिट रिमोट सहायक जो गिट और ड्रॉपबॉक्स के बीच पारदर्शी द्विदिशीय पुल के रूप में कार्य करता है और एक पारंपरिक गिट रिमोट की सभी गारंटी रखता है। यह साझा किए गए फ़ोल्डरों के साथ उपयोग करने के लिए भी सुरक्षित है, इसलिए इसका उपयोग सहयोग के लिए किया जा सकता है (असीमित सहयोग के साथ असीमित निजी रेपो!)।
रिमोट हेल्पर के साथ, ड्रॉपबॉक्स को एक जीआईटी रिमोट के रूप में उपयोग करना और जीआईटी क्लोन, गिट पुल और गिट पुश जैसे सभी नियमित गिट कमांड का उपयोग करना जारी रखना संभव है, और सब कुछ बस उम्मीद के मुताबिक काम करेगा।
यह उत्तर मर्क्यूरियल पर आधारित है अनुभव है, न कि गिट, बल्कि यह अनुभव कहता है कि ड्रॉपबॉक्स का उपयोग करना इस तरह से भ्रष्ट रिपोजिटरी के लिए पूछ रहा है, अगर एक मौका भी है कि आप एक ही ड्रॉपबॉक्स-आधारित रिपॉजिटरी को विभिन्न मशीनों से विभिन्न समय पर अपडेट कर रहे होंगे (मैक) यूनिक्स, मेरे मामले में विंडोज)।
मेरे पास उन चीजों की पूरी सूची नहीं है जो गलत हो सकती हैं, लेकिन यहां एक विशिष्ट उदाहरण है जो मुझे थोड़ा परेशान करता है। प्रत्येक मशीन की लाइन-एंडिंग पात्रों की अपनी धारणा है और फ़ाइल नामों में ऊपरी / निचले केस वर्णों को कैसे नियंत्रित किया जाता है। ड्रॉपबॉक्स और Git / Mercurial इसे थोड़ा अलग तरीके से हैंडल करते हैं (मुझे सटीक अंतर याद नहीं है)। अगर Dropbox Git / Mercurial की पीठ, presto, टूटी हुई रिपॉजिटरी के पीछे भंडार को अपडेट करता है। यह तुरंत और अदृश्य रूप से होता है, इसलिए आपको पता भी नहीं चलता कि आपकी रिपॉजिटरी तब तक टूटी हुई है जब तक आप उससे कुछ वसूलने की कोशिश नहीं करते।
इस तरह से एक गड़बड़ कर रही चीजों से खुदाई करने के बाद, मैं निम्नलिखित नुस्खा का उपयोग बड़ी सफलता और समस्याओं का कोई संकेत नहीं कर रहा हूं। बस अपने रिपॉजिटरी को ड्रॉपबॉक्स से बाहर ले जाएं। अन्य सभी चीज़ों के लिए ड्रॉपबॉक्स का उपयोग करें; प्रलेखन, JAR फाइलें , कुछ भी आप कृपया। और रिपॉजिटरी को प्रबंधित करने के लिए GitHub (Git) या Bitbucket (Mercurial) का उपयोग करें। दोनों स्वतंत्र हैं इसलिए यह लागतों में कुछ भी नहीं जोड़ता है, और प्रत्येक उपकरण अब अपनी ताकत के लिए खेलता है।
ड्रॉपबॉक्स के शीर्ष पर चल रहे Git / Mercurial जोखिम के अलावा कुछ नहीं जोड़ता है। यह मत करो।
ड्रॉपबॉक्स का उपयोग करने वाली छोटी टीमों के संबंध में:
यदि प्रत्येक डेवलपर के पास ड्रॉपबॉक्स पर अपने स्वयं के लिखने योग्य नंगे भंडार हैं, जो केवल अन्य डेवलपर्स के लिए खींचता है, तो इससे भ्रष्टाचार के जोखिम के साथ कोड साझा करने की सुविधा मिलती है!
फिर यदि आप एक केंद्रीकृत 'मेनलाइन' चाहते हैं, तो आप एक डेवलपर को अपने स्वयं के रेपो से सभी पुश का प्रबंधन कर सकते हैं।
मैं अपनी सभी परियोजनाओं को एक Git रिपॉजिटरी के तहत नहीं रखना चाहता था, और न ही मैं हर एक प्रोजेक्ट के लिए इस कोड को चलाना और चलाना चाहता था, इसलिए मैंने एक Bash स्क्रिप्ट बनाई जो इस प्रक्रिया को स्वचालित करेगी। आप इसे एक या कई निर्देशिकाओं पर उपयोग कर सकते हैं - इसलिए यह आपके लिए इस पोस्ट में कोड कर सकता है या यह एक साथ कई परियोजनाओं पर कर सकता है।
#!/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 और Dropbox का उपयोग करने का तरीका है ... बस दोनों की विशेषताओं के बारे में सोचें:
Git:
ड्रॉपबॉक्स:
और अगर आप अपनी कुछ फ़ाइलों को साझा करने से चिंतित हैं, तो उन्हें क्यों नहीं समझाएं? और तब आपको ड्रॉपबॉक्स का सबसे बड़ा फायदा Git को मिल सकता है, यानी पब्लिक और प्राइवेट फाइल्स को ...
अब यह 2015 है, और तीन दिन पहले, ड्रॉपबॉक्स एपीआई वी 2 पर आधारित एक नया टूल ड्रॉपबॉक्स के लिए सुरक्षित रूप से उपयोग करने के लिए बनाया गया है। यह डेस्कटॉप क्लाइंट का उपयोग करने के बजाय एपीआई के खिलाफ काम करता है, और एक साझा फ़ोल्डर में होस्ट किए गए रिपॉजिटरी को एक साथ कई पुश करता है।
एक बार कॉन्फ़िगर करने के बाद, यह एक git रिमोट को किसी अन्य git रिमोट की तरह सेट करने की अनुमति देता है।
git clone "dropbox::/path/to/repo"
git remote add origin "dropbox::/path/to/repo"
मैं एन्क्रिप्टेड रिमोट बैकअप के लिए मर्क्यूरियल (या गिट) + ट्रूक्रिप्ट + ड्रॉपबॉक्स का उपयोग करता हूं ।
सबसे अच्छी बात यह है कि अगर आप अपने कोड के एक छोटे से हिस्से को संशोधित करते हैं तो ड्रॉपबॉक्स पूरे ट्रूक्रॉफ्ट कंटेनर को सिंक नहीं करता है। सिंक समय परिवर्तन की मात्रा के लिए आनुपातिक है। भले ही यह एन्क्रिप्टेड है, ट्रू क्रिप्ट + ड्रॉपबॉक्स का संयोजन ब्लॉक सिफर + ब्लॉक स्तर सिंक का उत्कृष्ट उपयोग करता है।
दूसरे, एक अखंड एन्क्रिप्टेड कंटेनर न केवल सुरक्षा जोड़ता है, बल्कि यह रिपॉजिटरी भ्रष्टाचार की संभावना को भी कम करता है ।
सावधानी: हालांकि आपको ड्रॉपबॉक्स चलने के दौरान कंटेनर को माउंट नहीं करने के बारे में बहुत सावधान रहना होगा। यदि कंटेनर में 2 अलग-अलग क्लाइंट चेक-इन करते हैं, तो संघर्षों को हल करने के लिए यह एक दर्द भी हो सकता है। इसलिए, यह केवल एक व्यक्ति के लिए बैकअप के लिए उपयोग करने के लिए व्यावहारिक है, टीम के लिए नहीं।
सेट अप:
preserve modification timestamp
* अनचेक करें ।उपयोग:
PS preserve modification timestamp
ड्रॉपबॉक्स को बताता है कि फाइल को संशोधित कर दिया गया है और इसे सिंक करना चाहिए। ध्यान दें कि कंटेनर बढ़ते समय टाइमस्टैम्प को संशोधित करता है, भले ही आप उसमें कोई फ़ाइल न बदलें। यदि आप ऐसा नहीं करना चाहते हैं, तो बस वॉल्यूम को माउंट करेंread-only
मुझे डैन मैकनेविन का जवाब पसंद है! मैं अब एक साथ Git और Dropbox का उपयोग कर रहा हूं, और मैं अपने .bash_profile में कई उपनामों का उपयोग कर रहा हूं ताकि मेरे वर्कफ़्लो इस तरह दिखें :
~/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'
हम एक शेयर फ़ोल्डर पर इस विधि (ड्रॉपबॉक्स में एक नंगे भंडार का निर्माण) का उपयोग करते हैं ।
डेवलपर्स का एक छोटा समूह उस नंगे सिंक किए गए भंडार से खींच सकता है और एक स्थानीय क्लोन बना सकता है। एक बार काम की इकाई हो जाने के बाद, हम वापस मूल की ओर धकेल देते हैं।
एक चीज़ जो मुझे याद आ रही है वह है एक अच्छा तरीका है कि ई-मेल को एक बार एक पुश-ऑरिजनल जानकारी के साथ भेजा जाए जो कि एक पुश टू ऑरिजिन होता है। हम मैन्युअल रूप से परिवर्तनों पर नज़र रखने के लिए Google Wave का उपयोग कर रहे हैं।
मैंने अनुशंसित तरीके से मर्क्यूरियल का उपयोग किया है और आग्रह करता हूं कि आप सतर्क रहें, खासकर यदि मशीनों में से कोई भी भिन्न हो। ड्रॉपबॉक्स फोरा रहस्यमय रूप से फ़ाइल नाम की समस्याओं की शिकायतों से भरा है जो अनायास बदल रहे हैं। Hg (और मैं Git को मानता हूं) रूटीन चेकइन के दौरान नोटिस या शिकायत नहीं करेगा और आप केवल भ्रष्टाचार के बारे में सुनेंगे जब यह एक भ्रष्ट रेपो की शिकायत करता है जब आप इसे असली के लिए उपयोग करने का प्रयास करते हैं। बुरी खबर। काश मैं समस्या और इसके समाधान के बारे में अधिक विशिष्ट हो सकता; मैं अभी भी इस गंदगी से खुद को बाहर निकालने की कोशिश कर रहा हूं।
एक ओपन सोर्स प्रोजेक्ट (क्रॉस प्लेटफॉर्म [लिनक्स, मैक, विन] स्क्रिप्ट्स का एक संग्रह) है जो कि मुट्ठी भर (3-4) कमांड के साथ रिपॉजिटरी प्रबंधन के सभी नॉटी-ग्रिटि विवरण करता है।
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
पूर्ण कमांड संदर्भ और ट्यूटोरियल के लिए प्रोजेक्ट विकी और मैनुअल की जांच करें।
मैं अपने गैर- Github रेपो ड्रॉपबॉक्स पर संग्रहीत करता हूं। एक कैवियेट मैं भाग गया था जो एक पुनर्स्थापना के बाद सिंक कर रहा था। ड्रॉपबॉक्स बड़े लोगों के पास जाने से पहले सबसे छोटी फ़ाइलों को डाउनलोड करेगा। एक मुद्दा नहीं है अगर आप रात में शुरू करते हैं और सप्ताहांत के बाद वापस आते हैं :-)
मेरा धागा - http://forums.dropbox.com/topic.php?id=29984&replies=6
अब 2014 में, मैं लगभग डेढ़ साल तक बिना किसी समस्या के Git और Dropbox का उपयोग कर रहा हूं। हालांकि कुछ बिंदु:
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/
निर्दिष्ट नाम के तहत एक गिट रिपॉजिटरी उत्पन्न करेगा और वर्तमान निर्देशिका की पूरी सामग्री को नए बनाए गए मूल मास्टर शाखा में धकेल देगा। यदि एक से अधिक प्रोजेक्ट नाम दिए गए हैं, तो सही-प्रोजेक्ट का नाम तर्क का उपयोग किया जाएगा।
वैकल्पिक रूप से, -r कमांड तर्क दूरस्थ शाखा को निर्दिष्ट करता है जो मूल मास्टर को धक्का देगा। प्रोजेक्ट मूल मास्टर का स्थान -m तर्क के साथ भी निर्दिष्ट किया जा सकता है। एक डिफ़ॉल्ट .gitignore फ़ाइल को दूरस्थ शाखा निर्देशिका में भी रखा गया है। स्क्रिप्ट में निर्देशिका और .gitignore फ़ाइल डिफॉल्ट निर्दिष्ट हैं।
एक और तरीका:
@Dan उत्तर सहित अब तक के सभी उत्तर जो कि सबसे लोकप्रिय है , bitbucket आदि जैसे git पर केंद्रित सेवा का उपयोग करने के बजाय एक साझा भंडार को केंद्रीकृत करने के लिए ड्रॉपबॉक्स का उपयोग करने के विचार को संबोधित करते हैं।
लेकिन, जैसा कि मूल प्रश्न यह निर्दिष्ट नहीं करता है कि "Git और Dropbox को एक साथ प्रभावी रूप से उपयोग करने का क्या मतलब है" वास्तव में इसका अर्थ है, चलो एक और दृष्टिकोण पर काम करते हैं: "केवल वर्कट्री को सिंक करने के लिए Dropbox का उपयोग करना।"
कैसे करने के लिए इन चरणों है:
परियोजना निर्देशिका के अंदर, एक खाली .git
निर्देशिका बनाता है (जैसे mkdir -p myproject/.git
)
.git
ड्रॉपबॉक्स में डायरेक्टरी को अन-सिंक करें । यदि ड्रॉपबॉक्स ऐप का उपयोग किया जाता है: प्राथमिकताएं, सिंक पर जाएं, और "सिंक करने के लिए फ़ोल्डर चुनें", जहां .git
निर्देशिका को अनमार्क करना होगा। यह .git
निर्देशिका को हटा देगा ।
git init
प्रोजेक्ट डायरेक्टरी में चलाएं
यह भी काम करता है यदि .git
पहले से मौजूद है, तो केवल चरण 2 करें। ड्रॉपबॉक्स हालांकि वेबसाइट में गिट फाइलों की एक प्रति रखेगा।
चरण 2 ड्रॉपबॉक्स को गिट सिस्टम संरचना को सिंक नहीं करने का कारण होगा, जो इस दृष्टिकोण के लिए वांछित परिणाम है।
कोई इस दृष्टिकोण का उपयोग क्यों करेगा?
अभी तक धकेल दिए गए परिवर्तनों में ड्रॉपबॉक्स बैकअप नहीं होगा, और वे सभी डिवाइसों में सिंक किए जाएंगे।
यदि ड्रॉपबॉक्स उपकरणों के बीच समन्वयित करते समय कुछ गड़बड़ करता है, git status
और git diff
चीजों को छांटना आसान होगा।
यह ड्रॉपबॉक्स खाते में स्थान बचाता है (पूरा इतिहास वहां संग्रहीत नहीं किया जाएगा)
यह @ Dan के उत्तर पर टिप्पणियों में @dubek और @Ates द्वारा उठाए गए चिंताओं से बचा जाता है, और अन्य जवाब में @clu द्वारा चिंताओं को ।
रिमोट का अस्तित्व कहीं और (गीथूब आदि) इस दृष्टिकोण के साथ ठीक काम करेगा।
विभिन्न शाखाओं पर काम करने से कुछ समस्याएं आती हैं, जिनका ध्यान रखना आवश्यक है:
एक संभावित समस्या है ड्रॉपबॉक्स (अनावश्यक रूप से?) संभावित रूप से कई फाइलों को सिंक करना जब कोई व्यक्ति विभिन्न शाखाओं की जांच करता है।
यदि दो या दो से अधिक ड्रॉपबॉक्स सिंक किए गए उपकरणों की अलग-अलग शाखाएं हैं, तो दोनों उपकरणों में गैर-प्रतिबद्ध परिवर्तन खो सकते हैं,
इन मुद्दों के आसपास एक तरीका 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
।यह सही नहीं है क्योंकि इसमें कोई गारंटी नहीं है कि यह फिर से गिट स्थिति को गड़बड़ नहीं करेगा, लेकिन यह मदद करता है और फिलहाल मुझे कोई मुद्दा नहीं मिला।
MacOS पर आप केवल ड्रॉपबॉक्स को रोक सकते हैं, अपने परिवर्तन कर सकते हैं और फिर ड्रॉपबॉक्स को पुनः लोड कर सकते हैं। मैं निम्नलिखित संयोजन का उपयोग कर रहा हूं और इससे काफी खुश हूं:
दोनों में (आपके स्थानीय git प्रबंधित प्रोजेक्ट डायरेक्टरी और ड्रॉपबॉक्स पर स्थित आपका रिमोट गिट रिपॉजिटरी) ऑटो-पैकिंग को अक्षम करने के लिए निम्नलिखित कमांड चलाते हैं (जो ड्रॉपबॉक्स सिंकिंग के साथ मुख्य समस्या है)
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\""