प्रभावी रूप से एक साथ Git और ड्रॉपबॉक्स का उपयोग करना?


1132

मैं Git और Dropbox को प्रभावी रूप से एक साथ कैसे उपयोग करूं ?



39
यदि आप सिर्फ एक छोटी सी टीम हैं (5 मुझे लगता है), तो BitBucket निजी रिपॉजिटरी के लिए मुफ्त होस्टिंग प्रदान करता है। विडंबना यह है कि मेरे पास ड्रॉपबॉक्स पर मेरा स्थानीय रेपो है, बस उस स्थिति में जब मैं कंप्यूटर पर किसी चीज पर काम कर रहा होता हूं।
मार्क एडम्सन

12
मुझे यकीन नहीं है कि आपकी अतिरेक अतिरेक विडंबना है, लेकिन यह संभवतः काफी उपयोगी है
सिलासडविस

2
यह प्रश्न स्पष्ट नहीं है। इन उपकरणों को "प्रभावी रूप से" एक साथ उपयोग करने का क्या मतलब है? यह बहुत व्यापक है, और जनमत उत्तर तैयार करने की संभावना है।

3
अरे क्या आप मेरे उत्तर को सही मान सकते हैं: stackoverflow.com/a/32215708/589667 । मेरे जवाब में यह लाइब्रेरी मैं एक आधिकारिक टूल है, जो ड्रॉपबॉक्स डेवलपर्स द्वारा बनाया गया है, जो लोगों को ड्रॉपबॉक्स के साथ Git का उपयोग करने में मदद करता है।
क्लू

जवाबों:


1401

मुझे लगता है कि ड्रॉपबॉक्स पर गिट महान है। मैं हर समय इसका इस्तेमाल करता हूं। मेरे पास कई कंप्यूटर हैं (दो घर पर और एक काम पर) जो मैं ड्रॉपबॉक्स को केंद्रीय नंगे भंडार के रूप में उपयोग करता हूं। चूंकि मैं इसे एक सार्वजनिक सेवा पर होस्ट नहीं करना चाहता हूं, और मेरे पास एक सर्वर तक पहुंच नहीं है जिसे मैं हमेशा से बचा सकता हूं, ड्रॉपबॉक्स पृष्ठभूमि में सिंक (बहुत जल्दी) द्वारा इसका ख्याल रखता है।

सेटअप कुछ इस प्रकार है:

~/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बॉक्स खाते (या इस निर्देशिका को लोगों के साथ साझा कर सकते हैं) के साथ संबद्ध कर सकते हैं, आप सभी सामान्य गिट संचालन कर सकते हैं और वे स्वचालित रूप से आपके सभी अन्य मशीनों के साथ सिंक्रनाइज़ हो जाएंगे।

मैंने अपने तर्क पर एक ब्लॉग पोस्ट, ऑन वर्जन कंट्रोल , ( पुराना लिंक डेड ) लिखा है और मैंने अपना वातावरण कैसे सेट किया, यह मेरे रूबी के रेल विकास अनुभव पर आधारित है, लेकिन इसे कुछ भी, वास्तव में लागू किया जा सकता है।


61
मुझे आश्चर्य है कि एक ही समय में दो मशीनों से ड्रॉपबॉक्स नंगे रेपो को धक्का देने पर क्या होगा। यदि यह git की आंतरिक फ़ाइलों में से एक में संशोधन का कारण होगा, तो ड्रॉपबॉक्स आपको दिखाएगा कि कोई विरोध है - लेकिन आप तब क्या करते हैं? बस एक संस्करण चुनें, और फिर दोनों मशीनों (एक-एक करके) से फिर से धक्का दें?
dubek

162
@ डबेक: आप शायद साझा नंगे रेपो को समाप्त कर देंगे। यह दृष्टिकोण केवल एक छोटी सी टीम (मेरे मामले में दो) के लिए उपयुक्त है, जहां लोग केवल अपने कक्ष की दीवारों पर चिल्ला सकते हैं: "अरे! कोई नहीं धक्का! मैं अब धक्का दे रहा हूं!"।
एटस गोरल सेप

50
@ ऐट्स: कम से कम गिट विकेंद्रीकृत है, इसलिए यदि आप भ्रष्ट चीजों का प्रबंधन करते हैं तो आप इसे किसी की स्थानीय प्रति से पुनर्स्थापित कर सकते हैं। यदि आपके पास एक बड़ी टीम है, तो संभावना है कि कहीं एक मेजबान रेपो के लिए पर्याप्त नकदी नहीं है।
rdrey

75
मैं इस पृष्ठ पर पाँच से अधिक बार आया हूँ ताकि इस सटीक क्रम का उपयोग कर सकूँ। मैं उन्हें कभी याद नहीं करूँगा, लेकिन उन्हें प्रदान करने के लिए धन्यवाद!
जेरेमी मैक

32
@ जो: यह काफी नहीं है।
एतेस गोरल

126

इसे करने का सही तरीका git-Remote-dropbox का उपयोग है: https://github.com/anishathalye/git-remote-dropbox

ड्रॉपबॉक्स में अपने खुद के नंगे रेपो बनाने से बहुत सारी समस्याएं होती हैं। अनीश (पुस्तकालय के निर्माता) इसे सबसे अच्छा बताते हैं :

इन समस्याओं का मूल कारण यह है कि ड्रॉपबॉक्स डेस्कटॉप क्लाइंट को फाइल को सिंक करने के लिए बनाया गया है, न कि गिट रिपोजिटरी में। Git रिपॉजिटरी के लिए विशेष हैंडलिंग के बिना, यह Git जैसी ही गारंटी नहीं रखता है। दूरस्थ रिपॉजिटरी पर संचालन अब परमाणु नहीं है, और समवर्ती संचालन या सिंक्रनाइज़ेशन के साथ अशुभ समय के परिणामस्वरूप दूषित रिपॉजिटरी हो सकती है।

पारंपरिक गिट इस काम को ठीक से करने के लिए सर्वर साइड पर रन कोड को रिमूव करता है, लेकिन हम ऐसा नहीं कर सकते।

समाधान: इसे ठीक से हल करना संभव है। ड्रॉपबॉक्स के साथ Git का उपयोग करना संभव है और पारंपरिक Git रिमोट के रूप में समान सुरक्षा और स्थिरता की गारंटी है, तब भी जब कई उपयोगकर्ता और समवर्ती संचालन होते हैं!

एक उपयोगकर्ता के लिए, यह गिट-रिमोट-ड्रॉपबॉक्स का उपयोग करने के रूप में सरल है, एक गिट रिमोट सहायक जो गिट और ड्रॉपबॉक्स के बीच पारदर्शी द्विदिशीय पुल के रूप में कार्य करता है और एक पारंपरिक गिट रिमोट की सभी गारंटी रखता है। यह साझा किए गए फ़ोल्डरों के साथ उपयोग करने के लिए भी सुरक्षित है, इसलिए इसका उपयोग सहयोग के लिए किया जा सकता है (असीमित सहयोग के साथ असीमित निजी रेपो!)।

रिमोट हेल्पर के साथ, ड्रॉपबॉक्स को एक जीआईटी रिमोट के रूप में उपयोग करना और जीआईटी क्लोन, गिट पुल और गिट पुश जैसे सभी नियमित गिट कमांड का उपयोग करना जारी रखना संभव है, और सब कुछ बस उम्मीद के मुताबिक काम करेगा।


8
मुझे यह देखकर खुशी हुई कि किसी ने इस StackOverflow सवाल पर git-Remote-dropbox के बारे में पोस्ट किया। मुझे आश्चर्य है कि अगर इस प्रतिक्रिया को शीर्ष के करीब लाने का कोई तरीका है। वर्तमान स्वीकृत उत्तर द्वारा अनुशंसित विधि बहुत खतरनाक है और इसके परिणामस्वरूप भ्रष्टाचार हो सकता है।
fwenom

1
यह वास्तव में अच्छा है। मैं निश्चित रूप से इसकी जाँच करूँगा। लेकिन जब मैं एक देव बॉक्स से दूसरे में जाता हूं, और एक सिंक रेपो पर काम करना चाहता हूं, तो यह विधि केवल तभी काम करेगी जब मैं मशीन ए को छोड़ने पर हमेशा अपना काम करूं, और जहां मैं छोड़ दिया था वहां से उठाना चाहता हूं मशीन बी। मैं सही हूँ? यदि ऐसा है, तो यह आदर्श नहीं है, क्योंकि इससे "अंतरिम" हड़बड़ी पैदा होगी, जो किसी भी तर्क को रेपो के इतिहास को प्रदूषित कर सकता है। शायद मैं सिर्फ मेरा केक नहीं खा सकता और इसे भी खा सकता हूं!
भु बुदे विद्या

@bhuBouevidya नहीं यह सच नहीं है। सिंक किए गए परिवर्तनों के लिए आपको अपना काम करने की आवश्यकता नहीं है। जब तक फाइलें सेव होंगी तब तक फाइल सिंक हो जाएंगी। मूल रूप से यदि आपके पास एक मशीन पर संशोधित फ़ाइलों का एक गुच्छा है, तो संशोधनों को दूसरे पर सिंक किया जाएगा क्योंकि ड्रॉपबॉक्स सिर्फ इस बात की परवाह करता है कि डिस्क में क्या सहेजा गया है।
क्लू

2
@clu: हाँ, आपको अपना काम करना चाहिए और धक्का देना चाहिए। सभी जो git-Remote-dropbox करता है वह git रिमोट हेल्पर के रूप में कार्य करता है। अन्य रीमोट की तरह, आपके स्थानीय कमिट को तब तक रिमोट पर नहीं धकेला जाएगा जब तक कि एक पुश न किया जाए। स्थानीय रिपॉजिटरी में स्थानीय रूप से संशोधित फ़ाइलों को प्राप्त करने का तरीका ताकि उन्हें कमिट किया जा सके। ड्रॉपबॉक्स रिपॉजिटरी में आपकी फ़ाइलों के बारे में कुछ भी नहीं जानता है।
चींटियाँ

2
बस जिज्ञासु अगर गिट-रिमोट-ड्रॉपबॉक्स क्रॉस-प्लेटफॉर्म है ... मैं देखता हूं कि यह अजगर का उपयोग करता है, और मुझे पता है कि ड्रॉपबॉक्स के लिए कुछ अन्य अजगर सामान क्रॉस-प्लेटफॉर्म नहीं है, उदाहरण के लिए ओएस एक्स पर कमांड लाइन का सामान संगत नहीं है।
माइकल

89

यह उत्तर मर्क्यूरियल पर आधारित है अनुभव है, न कि गिट, बल्कि यह अनुभव कहता है कि ड्रॉपबॉक्स का उपयोग करना इस तरह से भ्रष्ट रिपोजिटरी के लिए पूछ रहा है, अगर एक मौका भी है कि आप एक ही ड्रॉपबॉक्स-आधारित रिपॉजिटरी को विभिन्न मशीनों से विभिन्न समय पर अपडेट कर रहे होंगे (मैक) यूनिक्स, मेरे मामले में विंडोज)।

मेरे पास उन चीजों की पूरी सूची नहीं है जो गलत हो सकती हैं, लेकिन यहां एक विशिष्ट उदाहरण है जो मुझे थोड़ा परेशान करता है। प्रत्येक मशीन की लाइन-एंडिंग पात्रों की अपनी धारणा है और फ़ाइल नामों में ऊपरी / निचले केस वर्णों को कैसे नियंत्रित किया जाता है। ड्रॉपबॉक्स और Git / Mercurial इसे थोड़ा अलग तरीके से हैंडल करते हैं (मुझे सटीक अंतर याद नहीं है)। अगर Dropbox Git / Mercurial की पीठ, presto, टूटी हुई रिपॉजिटरी के पीछे भंडार को अपडेट करता है। यह तुरंत और अदृश्य रूप से होता है, इसलिए आपको पता भी नहीं चलता कि आपकी रिपॉजिटरी तब तक टूटी हुई है जब तक आप उससे कुछ वसूलने की कोशिश नहीं करते।

इस तरह से एक गड़बड़ कर रही चीजों से खुदाई करने के बाद, मैं निम्नलिखित नुस्खा का उपयोग बड़ी सफलता और समस्याओं का कोई संकेत नहीं कर रहा हूं। बस अपने रिपॉजिटरी को ड्रॉपबॉक्स से बाहर ले जाएं। अन्य सभी चीज़ों के लिए ड्रॉपबॉक्स का उपयोग करें; प्रलेखन, JAR फाइलें , कुछ भी आप कृपया। और रिपॉजिटरी को प्रबंधित करने के लिए GitHub (Git) या Bitbucket (Mercurial) का उपयोग करें। दोनों स्वतंत्र हैं इसलिए यह लागतों में कुछ भी नहीं जोड़ता है, और प्रत्येक उपकरण अब अपनी ताकत के लिए खेलता है।

ड्रॉपबॉक्स के शीर्ष पर चल रहे Git / Mercurial जोखिम के अलावा कुछ नहीं जोड़ता है। यह मत करो।


13
मुझे लगता है कि गिट रिपॉजिटरी खुद को भ्रष्ट न करने के लिए पर्याप्त मजबूत है। मेरा अनुभव (उपयोग के एक वर्ष से अधिक, ज्यादातर एकल-उपयोगकर्ता, क्रॉस-प्लेटफ़ॉर्म, क्रॉस-कंप्यूटर, कई देव), यह है कि गिट का रेपो आसानी से दूषित नहीं होता है। Git में, रिपॉजिटरी में केवल जानकारी जोड़ी जाती है, मौजूदा फ़ाइलों को 99.9% समय के लिए अकेला छोड़ दिया जाता है (परिवर्तनशील फ़ाइलों को मैन्युअल रूप से निरीक्षण करना आसान होता है)। मैंने कभी-कभी ऐसे मामले देखे हैं जहां एक शाखा सूचक को ओवरराइट किया गया था, लेकिन इसे आसानी से देखा जा सकता है (यानी "शाखा (XXX की विवादित प्रति)") और हटा दिया गया (वास्तव में कोई वास्तविक फिक्सिंग की आवश्यकता नहीं है)।
इगन

1
@tc: आप सही हैं, कचरा संग्रहण के दौरान, गैर-पहुंच योग्य जानकारी को हटा दिया जाता है। हालांकि, मुझे लगता है कि अधिकांश व्यावहारिक मामलों के लिए, यह मजबूती को नुकसान नहीं पहुंचाता है: केवल 2 सप्ताह से अधिक पुरानी जानकारी अनुपलब्ध है (जो ड्रॉपबॉक्स को सिंक्रनाइज़ करने के लिए पर्याप्त समय है)। और इस तरह के संघर्ष के उस क्षण में, मुझे संदेह है कि ज्यादातर जानकारी पैक और अनपैक्ड रूप में उपलब्ध होगी।
इगॉन

मुझे लगता है कि बिना किसी सेंट्रल रेपो (नीचे दिए गए उत्तर में descibed) के साथ कोड-शेयरिंग परिदृश्य ड्रॉपबॉक्स में निर्देशिका के समवर्ती अपडेट के कारण संभावित भ्रष्टाचारों से बचाएगा। यदि किसी को केंद्रीय रेपो की आवश्यकता होती है, तो इसे अलग से प्रबंधित किया जा सकता है (और ड्रॉपबॉक्स से बाहर); ड्रॉपबॉक्स व्यक्तिगत काम करने वाले रेपो को धारण करेगा (जो सुविधाजनक भी है क्योंकि आप अपनी टीम में किसी अन्य व्यक्ति के स्रोत रेपो से समय-समय पर अद्यतन / खींच सकते हैं जो आप काम पर आधारित हैं)। (मैं वास्तव में इस तरह की सेटिंग में डार्क्स का उपयोग करने पर विचार कर रहा हूं।)
इम्ज़ - इवान ज़खरीशेव

5
+1 यदि आप अपनी रिपॉजिटरी को सार्वजनिक रूप से होस्ट नहीं करना चाहते हैं, तो बिटबकेट का उपयोग करें , 5 उपयोगकर्ताओं तक की टीमों के लिए निजी रिपोज मुफ्त हैं।
क्रिश्चियन स्पीच

विंडोज़ मशीन और OSX मशीन के बीच मैंने जो एक चीज़ देखी है, वह है फ़ाइल की अनुमति अलग-अलग समस्याएं पैदा कर सकती हैं। आप Git में अनुमतियों को बंद कर सकते हैं: "git config core.fileMode false"
devdrc

16

ड्रॉपबॉक्स का उपयोग करने वाली छोटी टीमों के संबंध में:

यदि प्रत्येक डेवलपर के पास ड्रॉपबॉक्स पर अपने स्वयं के लिखने योग्य नंगे भंडार हैं, जो केवल अन्य डेवलपर्स के लिए खींचता है, तो इससे भ्रष्टाचार के जोखिम के साथ कोड साझा करने की सुविधा मिलती है!

फिर यदि आप एक केंद्रीकृत 'मेनलाइन' चाहते हैं, तो आप एक डेवलपर को अपने स्वयं के रेपो से सभी पुश का प्रबंधन कर सकते हैं।


1
बहुत बढ़िया! इसके अलावा, रेपो करप्शन को कई बार लिखने से बचाने के लिए आप आसानी से मल्टीपल रिपोज बना सकते हैं और केवल अपने .git फ़ोल्डर्स को सिंक कर सकते हैं! आपको एक क्षण में सभी की आवश्यकता है - वांछित मूल से खींचना है! महान पी-टू-पी आदमी! आप विकेंद्रीकृत गिट के दर्शन को समझते हैं!
ब्रायन हाक

16

मैं अपनी सभी परियोजनाओं को एक 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

15

मुझे नहीं लगता कि Git और Dropbox का उपयोग करने का तरीका है ... बस दोनों की विशेषताओं के बारे में सोचें:

Git:

  • आपको एक केंद्रीय भंडार रखने की अनुमति देता है
  • आपको अपने स्वयं के परिवर्तनों के साथ अपना स्वयं का भंडार रखने की अनुमति देता है
  • आपको केंद्रीय भंडार से परिवर्तन भेजने और प्राप्त करने की अनुमति देता है
  • कई व्यक्तियों को एक ही फाइल को बदलने की अनुमति देता है और वे उन्हें मर्ज कर देते हैं या आपको उन्हें मर्ज करने के लिए कहते हैं यदि यह नहीं कर सकता है
  • केंद्रीय रिपॉजिटरी तक पहुंच की अनुमति देने के लिए वेब और डेस्कटॉप क्लाइंट हैं

ड्रॉपबॉक्स:

  • एक केंद्रीय भंडार में सब कुछ रखता है
  • आपको सर्वर में फ़ाइलों के अपने संस्करण रखने की अनुमति देता है
  • आपको केंद्रीय भंडार से परिवर्तन भेजने और प्राप्त करने के लिए मजबूर करता है
  • यदि कई व्यक्ति एक ही फाइल को बदलते हैं, तो पहले की गई फ़ाइल को बाद में आने के साथ बदल दिया जाता है, और कोई मर्ज नहीं होता है जो कि परेशानी है (और निश्चित रूप से इसका सबसे बड़ा नुकसान)
  • केंद्रीय रिपॉजिटरी तक पहुंच की अनुमति देने के लिए वेब और डेस्कटॉप क्लाइंट हैं।

और अगर आप अपनी कुछ फ़ाइलों को साझा करने से चिंतित हैं, तो उन्हें क्यों नहीं समझाएं? और तब आपको ड्रॉपबॉक्स का सबसे बड़ा फायदा Git को मिल सकता है, यानी पब्लिक और प्राइवेट फाइल्स को ...


एक केंद्रीय रेपो के लिए ड्रॉपबॉक्स एक अच्छा विकल्प है। यदि एक साझा फ़ोल्डर में रखा जाता है तो यह समूहों के लिए भी काम करता है।
mac

हां, लेकिन आपके पास समान मर्जिंग फीचर्स नहीं होंगे जैसे कि वास्तव में, यदि कोई आपकी जैसी ही फाइल को एडिट कर रहा है, और वह आपके बाद फाइल को सेव कर देता है, तो आपके बदलाव खो जाते हैं, जब तक कि आप वेब इंटरफेस पर जाकर डाउनलोड न करें पुराना संस्करण (आपका संस्करण)।
कोयोटे 21

8
ये गलत है। ड्रॉपबॉक्स संघर्ष नहीं छोड़ता है। यह एक एडिट के फाइलनाम को मैनेज करता है और दूसरे को निरंतरता के लिए उपयोग करता है। यदि आप चाहें तो आप उन्हें स्वयं मर्ज कर सकते हैं। यह एक अच्छा समझौता है, और डेटा खोना नहीं है। dropbox.com/help/36
क्लूलेस

5
हां, लेकिन चूंकि यह कोड के बारे में है, इसलिए कम समय मैं फ़ाइलों को विलय करने में खर्च करता हूं जो मैं अधिक कोड का उत्पादन कर सकता हूं, और एक सामान्य कोडबेस में परियोजना के आयामों के आधार पर एक समय में सैकड़ों संघर्ष हो सकते हैं, और यह एक बुरा सपना होगा मर्ज फिर एक के बाद एक विल्मर्ज (या कुछ और) जैसे मर्ज टूल की मदद से।
Coyote21

15

अब यह 2015 है, और तीन दिन पहले, ड्रॉपबॉक्स एपीआई वी 2 पर आधारित एक नया टूल ड्रॉपबॉक्स के लिए सुरक्षित रूप से उपयोग करने के लिए बनाया गया है। यह डेस्कटॉप क्लाइंट का उपयोग करने के बजाय एपीआई के खिलाफ काम करता है, और एक साझा फ़ोल्डर में होस्ट किए गए रिपॉजिटरी को एक साथ कई पुश करता है।

एक बार कॉन्फ़िगर करने के बाद, यह एक git रिमोट को किसी अन्य git रिमोट की तरह सेट करने की अनुमति देता है।

git clone "dropbox::/path/to/repo"
git remote add origin "dropbox::/path/to/repo"

2
यह अच्छा होगा यदि कुछ मॉड सुपरटेक के तहत स्टैटेक्सचेंज पर सभी कई git-with-dropbox प्रश्नों को मर्ज करेंगे जिसमें नवीनतम सामान का उल्लेख है।
ब्लेयर ह्यूटन

9

मैं एन्क्रिप्टेड रिमोट बैकअप के लिए मर्क्यूरियल (या गिट) + ट्रूक्रिप्ट + ड्रॉपबॉक्स का उपयोग करता हूं ।

सबसे अच्छी बात यह है कि अगर आप अपने कोड के एक छोटे से हिस्से को संशोधित करते हैं तो ड्रॉपबॉक्स पूरे ट्रूक्रॉफ्ट कंटेनर को सिंक नहीं करता है। सिंक समय परिवर्तन की मात्रा के लिए आनुपातिक है। भले ही यह एन्क्रिप्टेड है, ट्रू क्रिप्ट + ड्रॉपबॉक्स का संयोजन ब्लॉक सिफर + ब्लॉक स्तर सिंक का उत्कृष्ट उपयोग करता है।

दूसरे, एक अखंड एन्क्रिप्टेड कंटेनर न केवल सुरक्षा जोड़ता है, बल्कि यह रिपॉजिटरी भ्रष्टाचार की संभावना को भी कम करता है ।

सावधानी: हालांकि आपको ड्रॉपबॉक्स चलने के दौरान कंटेनर को माउंट नहीं करने के बारे में बहुत सावधान रहना होगा। यदि कंटेनर में 2 अलग-अलग क्लाइंट चेक-इन करते हैं, तो संघर्षों को हल करने के लिए यह एक दर्द भी हो सकता है। इसलिए, यह केवल एक व्यक्ति के लिए बैकअप के लिए उपयोग करने के लिए व्यावहारिक है, टीम के लिए नहीं।

सेट अप:

  • एक Truecrypt कंटेनर बनाएँ (कई गीगाबाइट ठीक है)
  • Truecrypt वरीयताओं के तहत, preserve modification timestamp* अनचेक करें ।
  • जैसा कि डैन ( https://stackoverflow.com/a/1961515/781695 ) द्वारा ऊपर उल्लेखित रेपो बनाएं

उपयोग:

  • ड्रॉपबॉक्स से बाहर निकलें
  • कंटेनर को माउंट करें, अपने परिवर्तनों को धक्का दें, अनमाउंट करें
  • ड्रॉपबॉक्स चलाएं

PS preserve modification timestampड्रॉपबॉक्स को बताता है कि फाइल को संशोधित कर दिया गया है और इसे सिंक करना चाहिए। ध्यान दें कि कंटेनर बढ़ते समय टाइमस्टैम्प को संशोधित करता है, भले ही आप उसमें कोई फ़ाइल न बदलें। यदि आप ऐसा नहीं करना चाहते हैं, तो बस वॉल्यूम को माउंट करेंread-only


अगर मैक्रो एन्क्रिप्टेड .dmg फ़ाइल छवि का उपयोग किया जाए तो क्या यह बहुत अलग होगा, क्या सिंक समय अभी भी परिवर्तनों के लिए आनुपातिक होगा?
आईबीएम

@IBrum क्षमा करें, मैंने इसे .dmg फ़ाइल के साथ आज़माया नहीं है
उपयोगकर्ता

7

मुझे डैन मैकनेविन का जवाब पसंद है! मैं अब एक साथ 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'

मैं शायद अंतिम चीज़ को एक उपनाम के रूप में उपयोग नहीं करूंगा, बल्कि एक शेल स्क्रिप्ट के रूप में। अन्यथा, मुझे यह बहुत पसंद है। जाग उपयोग के लिए अतिरिक्त क्रेडिट।
pauljohn32

6

हम एक शेयर फ़ोल्डर पर इस विधि (ड्रॉपबॉक्स में एक नंगे भंडार का निर्माण) का उपयोग करते हैं ।

डेवलपर्स का एक छोटा समूह उस नंगे सिंक किए गए भंडार से खींच सकता है और एक स्थानीय क्लोन बना सकता है। एक बार काम की इकाई हो जाने के बाद, हम वापस मूल की ओर धकेल देते हैं।

एक चीज़ जो मुझे याद आ रही है वह है एक अच्छा तरीका है कि ई-मेल को एक बार एक पुश-ऑरिजनल जानकारी के साथ भेजा जाए जो कि एक पुश टू ऑरिजिन होता है। हम मैन्युअल रूप से परिवर्तनों पर नज़र रखने के लिए Google Wave का उपयोग कर रहे हैं।


81
Google Wave का उपयोग कर रहा है?
क्रिस्टोफर जॉनसन जूल

6

मैंने अनुशंसित तरीके से मर्क्यूरियल का उपयोग किया है और आग्रह करता हूं कि आप सतर्क रहें, खासकर यदि मशीनों में से कोई भी भिन्न हो। ड्रॉपबॉक्स फोरा रहस्यमय रूप से फ़ाइल नाम की समस्याओं की शिकायतों से भरा है जो अनायास बदल रहे हैं। Hg (और मैं Git को मानता हूं) रूटीन चेकइन के दौरान नोटिस या शिकायत नहीं करेगा और आप केवल भ्रष्टाचार के बारे में सुनेंगे जब यह एक भ्रष्ट रेपो की शिकायत करता है जब आप इसे असली के लिए उपयोग करने का प्रयास करते हैं। बुरी खबर। काश मैं समस्या और इसके समाधान के बारे में अधिक विशिष्ट हो सकता; मैं अभी भी इस गंदगी से खुद को बाहर निकालने की कोशिश कर रहा हूं।


मुझे मर्क्यूरियल के साथ भी यही समस्या थी
टॉम्बा

git दूषण के लिए डिजाइन की तुलना में दूसरों की तुलना में अधिक जाँच करते हैं। तो कम से कम आपको पता होगा कि ऐसा कब होता है और समस्या को ठीक कर सकता है।
एंडर्स

6

एक ओपन सोर्स प्रोजेक्ट (क्रॉस प्लेटफॉर्म [लिनक्स, मैक, विन] स्क्रिप्ट्स का एक संग्रह) है जो कि मुट्ठी भर (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

पूर्ण कमांड संदर्भ और ट्यूटोरियल के लिए प्रोजेक्ट विकी और मैनुअल की जांच करें।


4

मैं अपने गैर- Github रेपो ड्रॉपबॉक्स पर संग्रहीत करता हूं। एक कैवियेट मैं भाग गया था जो एक पुनर्स्थापना के बाद सिंक कर रहा था। ड्रॉपबॉक्स बड़े लोगों के पास जाने से पहले सबसे छोटी फ़ाइलों को डाउनलोड करेगा। एक मुद्दा नहीं है अगर आप रात में शुरू करते हैं और सप्ताहांत के बाद वापस आते हैं :-)

मेरा धागा - http://forums.dropbox.com/topic.php?id=29984&replies=6


4

अब 2014 में, मैं लगभग डेढ़ साल तक बिना किसी समस्या के Git और Dropbox का उपयोग कर रहा हूं। हालांकि कुछ बिंदु:

  • ड्रॉपबॉक्स का उपयोग करने वाली मेरी सभी मशीनें विंडोज, विभिन्न संस्करणों (7 से 8) + 1 मैक पर हैं।
  • मैं रिपॉजिटरी को किसी और के साथ साझा नहीं करता, इसलिए मैं इसे संशोधित करने वाला एकमात्र व्यक्ति हूं।
  • git push एक दूरस्थ रिपॉजिटरी में धकेलता है, ताकि अगर यह कभी दूषित हो जाए, तो मैं इसे आसानी से ठीक कर सकूं।
  • मुझे C:\Usersसाथ में एलियासेस बनाना था mklink /D link targetक्योंकि कुछ पुस्तकालयों को निरपेक्ष स्थानों पर इंगित किया गया था।

3

मुझे डैन मैकिन्विन के शीर्ष मत वाले उत्तर पसंद हैं। मैंने कई बार गिट कमांड का क्रम समाप्त किया और एक स्क्रिप्ट बनाने का फैसला किया। तो यहाँ यह है:

#!/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 फ़ाइल डिफॉल्ट निर्दिष्ट हैं।


3

एक और तरीका:

@Dan उत्तर सहित अब तक के सभी उत्तर जो कि सबसे लोकप्रिय है , bitbucket आदि जैसे git पर केंद्रित सेवा का उपयोग करने के बजाय एक साझा भंडार को केंद्रीकृत करने के लिए ड्रॉपबॉक्स का उपयोग करने के विचार को संबोधित करते हैं।

लेकिन, जैसा कि मूल प्रश्न यह निर्दिष्ट नहीं करता है कि "Git और Dropbox को एक साथ प्रभावी रूप से उपयोग करने का क्या मतलब है" वास्तव में इसका अर्थ है, चलो एक और दृष्टिकोण पर काम करते हैं: "केवल वर्कट्री को सिंक करने के लिए Dropbox का उपयोग करना।"

कैसे करने के लिए इन चरणों है:

  1. परियोजना निर्देशिका के अंदर, एक खाली .gitनिर्देशिका बनाता है (जैसे mkdir -p myproject/.git)

  2. .gitड्रॉपबॉक्स में डायरेक्टरी को अन-सिंक करें । यदि ड्रॉपबॉक्स ऐप का उपयोग किया जाता है: प्राथमिकताएं, सिंक पर जाएं, और "सिंक करने के लिए फ़ोल्डर चुनें", जहां .gitनिर्देशिका को अनमार्क करना होगा। यह .gitनिर्देशिका को हटा देगा ।

  3. git initप्रोजेक्ट डायरेक्टरी में चलाएं

यह भी काम करता है यदि .gitपहले से मौजूद है, तो केवल चरण 2 करें। ड्रॉपबॉक्स हालांकि वेबसाइट में गिट फाइलों की एक प्रति रखेगा।

चरण 2 ड्रॉपबॉक्स को गिट सिस्टम संरचना को सिंक नहीं करने का कारण होगा, जो इस दृष्टिकोण के लिए वांछित परिणाम है।

कोई इस दृष्टिकोण का उपयोग क्यों करेगा?

  • अभी तक धकेल दिए गए परिवर्तनों में ड्रॉपबॉक्स बैकअप नहीं होगा, और वे सभी डिवाइसों में सिंक किए जाएंगे।

  • यदि ड्रॉपबॉक्स उपकरणों के बीच समन्वयित करते समय कुछ गड़बड़ करता है, git statusऔर git diffचीजों को छांटना आसान होगा।

  • यह ड्रॉपबॉक्स खाते में स्थान बचाता है (पूरा इतिहास वहां संग्रहीत नहीं किया जाएगा)

  • यह @ Dan के उत्तर पर टिप्पणियों में @dubek और @Ates द्वारा उठाए गए चिंताओं से बचा जाता है, और अन्य जवाब में @clu द्वारा चिंताओं को ।

रिमोट का अस्तित्व कहीं और (गीथूब आदि) इस दृष्टिकोण के साथ ठीक काम करेगा।

विभिन्न शाखाओं पर काम करने से कुछ समस्याएं आती हैं, जिनका ध्यान रखना आवश्यक है:

  • एक संभावित समस्या है ड्रॉपबॉक्स (अनावश्यक रूप से?) संभावित रूप से कई फाइलों को सिंक करना जब कोई व्यक्ति विभिन्न शाखाओं की जांच करता है।

  • यदि दो या दो से अधिक ड्रॉपबॉक्स सिंक किए गए उपकरणों की अलग-अलग शाखाएं हैं, तो दोनों उपकरणों में गैर-प्रतिबद्ध परिवर्तन खो सकते हैं,

इन मुद्दों के आसपास एक तरीका git worktreeअलग निर्देशिकाओं में शाखा चेकआउट रखने के लिए उपयोग करना है।


जैसा कि कोई है जो फाइलों पर काम कर रहा है कि यह संस्करण नियंत्रण के लिए अच्छा होगा, लेकिन एक iPad (ड्रॉपबॉक्स सिंकिंग के माध्यम से) पर भी संपादन योग्य हो सकता है, यह उत्तर उस केस को कवर करता है।
वगरी

त्वरित अनुवर्ती, वर्तमान ड्रॉपबॉक्स व्यवहार अलग है। बस हटाने और ड्रॉपबॉक्स को सिंक नहीं करने के लिए कहने का अर्थ है विपरीत, बादल में रहता है, स्थानीय से हटाता है। लेकिन एक समाधान के साथ एक शानदार जवाब है। superuser.com/a/1527145/109561 मेरे मामले में (मैक पर) अनदेखा करने के लिए फ़ाइल को निम्न झंडे में xattr -w com.dropbox.ignored 1 /path/to/somewhere
वगरी

3

मेरे 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

2

मैंने एक समान मुद्दे का सामना किया है और उसी के लिए एक छोटी सी स्क्रिप्ट बनाई है। विचार ड्रॉपबॉक्स को जीआईटी के साथ उपयोग करना है। वर्तमान में, मैंने जल्दी से रूबी कोड लागू किया है , और मैं जल्द ही और अधिक जोड़ूंगा।

स्क्रिप्ट सुलभ है https://github.com/nuttylabs/box-git


0

थर्ड-पार्टी इंटीग्रेशन टूल का उपयोग किए बिना, मैं स्थिति को थोड़ा बढ़ा सकता हूं और ड्रॉपबॉक्स और अन्य समान क्लाउड डिस्क सेवाओं जैसे कि स्पाइडरऑक फॉर गिट का उपयोग कर सकता हूं।

लक्ष्य इन फ़ाइलों के संशोधनों के बीच में सिंक्रनाइज़ेशन से बचने के लिए है, क्योंकि यह एक आंशिक स्थिति को अपलोड कर सकता है और फिर इसे वापस डाउनलोड करेगा, पूरी तरह से आपके गिट स्थिति को दूषित करेगा।

इस समस्या से बचने के लिए, मैंने किया:

  1. मेरे git इंडेक्स को एक फ़ाइल में उपयोग करके बंडल करें git bundle create my_repo.git --all
  2. तात्कालिक के बजाय, फ़ाइल मॉनिटरिंग के लिए विलंब निर्धारित करें, जैसे 5 मिनट। यह संभावना कम कर देता है ड्रॉपबॉक्स एक परिवर्तन के बीच में एक आंशिक स्थिति को सिंक्रनाइज़ करता है। क्लाउड डिस्क पर फ़ाइलों को संशोधित करते समय यह बहुत मदद करता है (जैसे तात्कालिक बचत नोट लेने वाले ऐप्स के साथ)।

यह सही नहीं है क्योंकि इसमें कोई गारंटी नहीं है कि यह फिर से गिट स्थिति को गड़बड़ नहीं करेगा, लेकिन यह मदद करता है और फिलहाल मुझे कोई मुद्दा नहीं मिला।


0

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\""
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.