Git ve Dropbox'ı etkili bir şekilde mi kullanıyorsunuz?


1132

Nasıl kullanırım Git ve Dropbox'ı birlikte etkili?



39
Eğer sadece küçük bir ekip (sanırım 5 kadar), o zaman BitBucket özel depolar için ücretsiz barındırma sağlar. İronik olarak, bir şey üzerinde çalışırken bilgisayarlar arasında hareket etmem durumunda, DropBox üzerinde yerel repo'm var.
Mark Adamson

12

2
Bu soru belirsiz. Bu araçları birlikte "etkin bir şekilde" kullanmak ne anlama geliyor? Ayrıca çok geniştir ve muhtemelen cevaplı cevaplar üretebilir.

3
Hey lütfen cevabımı doğru olarak düşünebilir misiniz: stackoverflow.com/a/32215708/589667 . Cevabımda bahsettiğim bu kütüphane, insanların Dropbox ile Git kullanmasına yardımcı olmak için dropbox geliştiricileri tarafından oluşturulmuş resmi bir araçtır.
clu

Yanıtlar:


1401

Dropbox'ta Git'in harika olduğunu düşünüyorum. Her zaman kullanıyorum. Dropbox'ı merkezi bir çıplak depo olarak kullandığım birden fazla bilgisayarım var (ikisi evde ve biri işte). Bir kamu hizmetinde barındırmak istemediğimden ve her zaman ssh yapabileceğim bir sunucuya erişimim olmadığından, Dropbox arka planda (çok hızlı) senkronize ederek bunu halleder.

Kurulum şöyle bir şeydir:

~/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

Oradan, ~/Dropbox/git/project.gitDropbox hesabınızla ilişkilendirdiğiniz (veya bu dizini kişilerle paylaştığınız) klonlayabilirsiniz , tüm normal Git işlemlerini yapabilirsiniz ve bunlar diğer tüm makinelerinizle otomatik olarak senkronize edilir.

Akıl yürütmem ve ortamımı nasıl kurduğum hakkında Sürüm Denetimi'nde ( eski bağlantı ölü ) bir blog yazısı yazdım, Ruby on Rails geliştirme deneyimime dayanıyor , ama gerçekten her şeye uygulanabilir.


61
Aynı anda iki makineden dropbox çıplak repoya basarsanız ne olacağını merak ediyorum. Git'in dahili dosyalarından birinde bir değişikliğe neden olacaksa, dropbox size bir çakışma olduğunu gösterecektir - ancak o zaman ne yaparsınız? Sadece sürümlerden birini seçin ve her iki makineden de tekrar teker teker itin?
dubek

162
@dubek: Muhtemelen paylaşılan çıplak repoyu bozacaksınız. Bu yaklaşım sadece insanların kabin duvarlarının üzerinden bağırabilecekleri küçük bir ekip (benim durumumda iki tane) için uygundur: "Hey! Kimse itmiyor! Şimdi itiyorum!".
Ateş Goral

50
@Ates: En azından git ademi merkeziyetçi olduğundan, şeyleri bozmayı başarırsanız, birinin yerel kopyasından geri yükleyebilirsiniz. Büyük bir ekibiniz varsa, bir yerde barındırılan bir repo için yeterli para olması ihtimali vardır.
rdrey

75
Bu komut dizisini kullanmak için bu sayfaya beş defadan fazla geri döndüm. Onları asla ezberlemeyeceğim, ama sağladığınız için teşekkürler!
Jeremy Mack

32
@ Jo: Yeterince getto değil.
Ateş Goral

126

Bunu yapmanın doğru yolu git-remote-dropbox kullanmaktır: https://github.com/anishathalye/git-remote-dropbox

Dropbox'ta kendi çıplak repo'nuzu oluşturmak çok fazla soruna neden olur. Anish (kütüphanenin yaratıcısı) bunu en iyi açıklar :

Bu sorunların temel nedeni, Dropbox masaüstü istemcisinin Git depolarını değil dosyaları senkronize etmek için tasarlanmış olmasıdır. Git depoları için özel işlem yapılmazsa Git ile aynı garantileri sağlamaz. Uzak depodaki işlemler artık atomik değildir ve eşzamanlı işlemler veya senkronizasyon ile şanssız zamanlama havuzun bozulmasına neden olabilir.

Geleneksel Git uzaktan kumandaları, bunun düzgün çalışması için sunucu tarafında kod çalıştırır, ancak bunu yapamayız.

Çözüm: Bunu doğru bir şekilde çözmek mümkündür. Git'i Dropbox ile kullanmak ve birden fazla kullanıcı ve eşzamanlı işlem olsa bile geleneksel Git uzaktan kumandasıyla aynı güvenlik ve tutarlılık garantisine sahip olmak mümkündür!

Bir kullanıcı için, Git ve Dropbox arasında şeffaf bir çift yönlü köprü görevi gören ve geleneksel bir Git uzaktan kumandasının tüm garantilerini koruyan bir Git uzaktan yardımcısı olan git-remote-dropbox'ı kullanmak kadar basittir. Paylaşılan klasörlerle kullanmak bile güvenlidir, bu nedenle işbirliği için kullanılabilir (sınırsız ortak çalışanlarla sınırsız özel depolar yay!).

Uzaktan yardımla, Dropbox'ı Git uzaktan kumandası olarak kullanmak ve git clone, git pull ve git push gibi tüm normal Git komutlarını kullanmaya devam etmek mümkündür ve her şey beklendiği gibi çalışır.


8
Birinin bu StackOverflow sorusuna git-remote-dropbox hakkında bilgi gönderdiğini gördüğüme sevindim. Bu yanıtı zirveye çıkarmanın bir yolu olup olmadığını merak ediyorum. Geçerli kabul edilen cevap tarafından önerilen yöntem oldukça tehlikelidir ve depo bozulmasına neden olabilir.
fwenom

1
Bu gerçekten havalı. kesinlikle kontrol edeceğim. ancak bir geliştirici kutusundan diğerine geçtiğimde ve senkronize bir repo üzerinde çalışmaya devam etmek istediğimde, bu yöntem yalnızca makineyi A'dan çıktığımda işimi her zaman taahhüt edersem ve kaldığım yerden devam etmek istediğimde işe yarayacak makine B. haklı mıyım? eğer öyleyse, bu ideal değildir, çünkü "geçici" komisyonların telaşlanmasına yol açacaktır, ki bu da repo'nun taahhüt tarihini kirleteceğini iddia edebilir. belki sadece kekimi yiyip yiyemem!
bhu Boue vidya

@bhuBouevidya Hayır, bu doğru değil. Senkronize edilerek yapılacak değişiklikler için çalışmalarınızı yürütmeniz gerekmez. Dosyalar kaydedildiği sürece dosyalar senkronize edilir. Temel olarak, bir makinede bir grup değiştirilmiş dosya varsa, değişiklikler diğeriyle senkronize edilir, çünkü Dropbox sadece diske kaydedilenleri önemser.
clu

2
@clu: Evet, işinizi yürütmeli ve zorlamalısınız. Git-remote-dropbox'ın yaptığı tek şey, bir git uzaktan yardımcısı olarak hareket etmektir. Tıpkı diğer uzaktan kumandalar gibi, yerel işlemleriniz de itme yapılana kadar uzaktan kumandaya itilmez. Yerel olarak değiştirilmiş dosyaları yerel veri havuzuna aktarmanın yolu, böylece aktarılabilir. Dropbox depoda olmayan dosyalarınız hakkında hiçbir şey bilmeyecektir.
Karıncalar

2
Git-remote-dropbox çapraz platform mu diye merak ediyorum ... Python kullandığını görüyorum ve Dropbox için diğer bazı python şeylerinin çapraz platform olmadığını biliyorum , örneğin OS X'te komut satırı şeyleri uyumlu değil.
Michael

89

Bu cevap Git'e değil Mercurial deneyimine dayanıyor , ancak bu deneyim Dropbox'ı bu şekilde kullanmanın, farklı makinelerde aynı Dropbox tabanlı depoyu çeşitli zamanlarda güncelleme şansınız olup olmadığını (Mac, Unix, benim durumumda Windows).

Yanlış gidebilecek şeylerin tam bir listesi yok, ama işte beni ısırtan belirli bir örnek. Her makinenin kendi satır sonu karakterleri kavramı ve dosya adlarında büyük / küçük harf karakterlerinin nasıl işlendiği vardır. Dropbox ve Git / Mercurial bunu biraz farklı şekilde ele alıyor (kesin farklılıkları hatırlamıyorum). Dropbox, Git / Mercurial'ın arkasındaki, önceden ayarlanmış, bozuk deponun arkasındaki havuzu güncellerse. Bu hemen ve görünmez bir şekilde gerçekleşir, bu yüzden deponuzun bir şeyleri kurtarmaya çalışana kadar bozulduğunu bile bilmezsiniz.

İşleri bu şekilde yaparak bir karmaşadan çıktıktan sonra, aşağıdaki tarifi büyük bir başarı ile ve problem belirtisi kullanmıyorum. Deponuzu Dropbox'ın dışına taşımanız yeterlidir. Diğer her şey için Dropbox kullanın; belgeler, JAR dosyaları , lütfen istediğiniz herhangi bir şey. Ve kullanmak GitHub (Git) veya Bitbucket deposunu kendisi yönetmek için (Mercurial). Her ikisi de ücretsizdir, bu da maliyetlere hiçbir şey katmaz ve her araç şimdi güçlü yönlerine oynar.

Git / Mercurial'ı Dropbox'ın üstünde çalıştırmak risk dışında bir şey katmaz. Yapma.


13
Git deposunun kendisini bozmayacak kadar sağlam olduğunu hissediyorum. Deneyimlerim (bir yıldan fazla kullanım, çoğunlukla tek kullanıcılı, çapraz platform, bilgisayarlar arası, çoklu geliştiriciler), git'in repo'sunun kolayca bozulmamasıdır. Git'te depoya yalnızca bilgi eklenir, varolan dosyalar% 99,9 oranında yalnız bırakılır (değiştirilebilir dosyaların çoğunlukla elle incelenmesi kolaydır). Bazen bir şube işaretçisinin üzerine yazıldığı vakaları gördüm, ancak bu kolayca görülebilir (yani "şube (XXX'nin çakışan kopyası)") ve kaldırıldı (gerçek bir sabitlemeye gerek yok).
Egon

1
@tc: Haklısın, çöp toplama sırasında git'te ulaşılamayan bilgiler kaldırıldı. Bununla birlikte, çoğu pratik durumda, bunun sağlamlığa zarar vermediğini düşünüyorum: sadece 2 haftadan eski erişilemeyen bilgiler etkilenir (bu, DropBox'ın senkronize edilmesi için yeterli zamandır). Ve böyle bir çatışma anında, çoğu bilginin hem paketlenmiş hem de paketsiz formda bulunacağından şüpheleniyorum.
Egon

Ben düşünüyorum merkezi bir repo ile kod paylaşımı senaryosu (aşağıda bir cevap olarak ortaya konmuştur), çünkü dropbox'a dizine eşzamanlı güncellemeleri mümkün yolsuzluklara birini kurtarmak olacaktır. Bir kişinin merkezi bir repoya ihtiyacı varsa, ayrı olarak yönetilebilir (ve dropbox'tan çıkabilir); dropbox kişisel çalışma depolarını tutacaktır (bu da zaman zaman sizin çalıştığınız ekibinizdeki bir başkasının kaynak deposundan güncelleme / çekebilmeniz için uygundur). (Aslında böyle bir ortamda darcs kullanmayı düşünüyorum.)
imz - Ivan Zakharyaschev

5
+1 Havuzlarınızı herkese açık olarak barındırmak istemiyorsanız, Bitbucket kullanın , özel depolar 5 kullanıcıya kadar olan ekipler için ücretsizdir.
Christian Specht

Bir Windows makinesi ile OSX makinesi arasında fark ettiğim bir şey, dosya izinlerinin farklı sorunlara neden olabileceğidir. Git'teki izinleri aşağıdakileri kullanarak kapatabilirsiniz: "git config core.fileMode false"
devdrc

16

Dropbox kullanan küçük ekiplerle ilgili olarak:

Her geliştiricinin yalnızca diğer geliştiricilere yönelik olan Dropbox'ta kendi yazılabilir çıplak deposu varsa, bu yolsuzluk riski olmadan kod paylaşımını kolaylaştırır!

Ardından, merkezi bir 'ana hat' istiyorsanız, bir geliştiricinin tüm itmeleri kendi repolarından yönetmesini sağlayabilirsiniz.


1
Harika! Ayrıca, çoğaltma yazmalarını birden çok yazma işleminden korumak için MULTIPLE depolarını yapabilir ve yalnızca .git klasörlerini senkronize edebilirsiniz! Bir anda ihtiyacınız olan tek şey - istenen kaynaktan çekmek! Harika P-to-P adam! Merkezi olmayan git'in felsefesini anlıyorsunuz!
Brian Haak

16

Tüm projelerimi bir Git deposunun altına koymak istemedim, içeri girmek ve bu kodları her proje için çalıştırmak istemedim, bu yüzden süreci otomatikleştirecek bir Bash betiği yaptım . Bir veya daha fazla dizin üzerinde kullanabilirsiniz - böylece bu yayındaki kodu sizin için yapabilir veya aynı anda birden fazla projede yapabilir.

#!/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 ve Dropbox'ı kullanmanın bir yol olduğunu düşünmüyorum ... Her ikisinin de özelliklerini düşünün:

Git:

  • Merkezi bir depoya sahip olmanızı sağlar
  • Kendi değişikliklerinizle birlikte kendi deponuza sahip olmanızı sağlar
  • Merkezi depodan değişiklik göndermenizi ve almanızı sağlar
  • Birden çok kişinin aynı dosyaları değiştirmesine izin verir ve dosyaları birleştirir veya yapamazsa birleştirmenizi ister
  • Merkezi depoya erişime izin veren web ve masaüstü istemcileri vardır

Dropbox:

  • Her şeyi merkezi bir depoda tutar
  • Sunucudaki dosyaların kendi sürümlerine sahip olmanızı sağlar
  • Merkezi depodan değişiklik göndermeye ve almaya zorlar
  • Birden fazla kişi aynı dosyaları değiştirirse, taahhüt edilen ilk dosya daha sonraki taahhütlerle değiştirilir ve hiçbir sorun oluşmaz (ve kesinlikle en büyük dezavantajı)
  • Merkezi depoya erişime izin veren web ve masaüstü istemcileri vardır.

Bazı dosyalarınızı paylaşmaktan endişe ediyorsanız, neden onları şifrelemesiniz? Ve sonra Dropbox'ın Git'e, yani genel ve özel dosyalara sahip olmanın en büyük avantajını elde edebilirsiniz ...


Dropbox, merkezi bir repo için iyi bir seçenektir. Paylaşılan bir klasöre yerleştirilirse, gruplar için bile çalışır.
mac

Evet, ancak git ile aynı birleştirme özelliklerine sahip olmayacaksınız, aslında birisi sizinkiyle aynı dosyayı düzenliyorsa ve dosyayı sizden sonra kaydederse, web arayüzüne gidip indirmedığınız sürece değişiklikleriniz kaybolur eski sürüm (sürümünüz).
Coyote21

8
Bu yanlış. Dropbox çakışmaları düşürmez. Bir düzenlemenin dosya adını yönetir ve diğerini süreklilik için kullanır. İsterseniz bunları kendiniz birleştirebilirsiniz. Bu iyi bir uzlaşmadır ve veri kaybetmez. dropbox.com/help/36
Clueless

5
Evet ama bu kodla ilgili olduğundan, dosyaları birleştirmek için ne kadar az zaman harcarsam o kadar çok kod üretebilirim ve normal bir kod tabanında proje boyutlarına bağlı olarak bir seferde yüzlerce çatışma olabilir ve bu bir kabus olacaktır. WinMerge (veya benzer bir şey) gibi bir birleştirme aracı yardımıyla bile tek tek birleştirin.
Coyote21

15

Şimdi 2015 ve üç gün önce Dropbox'ta git'i güvenle kullanmak için Dropbox API v2 tabanlı yeni bir araç oluşturuldu. Masaüstü istemcisini kullanmak yerine API'ye karşı çalışır ve paylaşılan bir klasörde barındırılan bir depoya aynı anda birden çok push işlemi gerçekleştirir.

Yapılandırıldıktan sonra, diğer uzaktan kumandalar gibi bir git uzaktan kumandası kurulmasına izin verir.

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

2
Bazı modların, en son şeylerden bahseden bir süperdiş altında stackexchange'teki birçok git-with-dropbox sorusunu birleştirmesi iyi olurdu.
Blair Houghton

9

Şifrelenmiş uzaktan yedeklemeler için Mercurial (veya Git) + TrueCrypt + Dropbox kullanıyorum .

En havalı şey, kodunuzun küçük bir bölümünü değiştirirseniz Dropbox'ın tüm TrueCrypt kapsayıcısını senkronize ETMEMEKTEDİR. Senkronizasyon süresi kabaca değişikliklerin miktarıyla orantılıdır. Şifrelenmiş olsa da, TrueCrypt + Dropbox kombinasyonu blok şifreleme + blok seviyesi senkronizasyonunun mükemmel kullanımını sağlar.

İkincisi, monolitik şifreli bir konteyner sadece güvenlik sağlamakla kalmaz, aynı zamanda depo bozulması olasılığını da azaltır .

Dikkat: Bununla birlikte, Dropbox çalışırken kabı monte etmemeye çok dikkat etmelisiniz. Ayrıca, 2 farklı müşteri konteynere farklı sürümleri iade ederse çatışmaları çözmek için bir acı olabilir. Bu nedenle, sadece bir kişi için yedekler için kullanan tek bir kişi için pratiktir.

Kurmak:

  • Truecrypt kapsayıcısı oluşturma (birden çok Gigabyte iyi)
  • Truecrypt tercihleri ​​altında preserve modification timestamp* işaretini kaldırın .
  • Dan tarafından yukarıda belirtildiği gibi bir repo oluşturun ( https://stackoverflow.com/a/1961515/781695 )

Kullanımı:

  • Dropbox'tan çık
  • Konteyneri monte edin, değişikliklerinizi itin, bağlantısını kesin
  • Dropbox'ı çalıştır

PS preserve modification timestampDropbox'ın işaretini kaldırmak dosyanın değiştirildiğini ve senkronize edilmesi gerektiğini bildirir. Kapsayıcıyı monte etmenin, içinde herhangi bir dosya değiştirmeseniz bile zaman damgasını değiştirdiğini unutmayın. Bunun olmasını istemiyorsanız, birimiread-only


Bir macos şifreli .dmg dosya görüntüsü kullanmak çok farklı olurdu, senkronizasyon süresi yine de değişikliklerle yaklaşık olarak orantılı olur mu?
IBrum

@IBrum Maalesef, bir .dmg dosyası ile denemedim
kullanıcı

7

Dan McNevin'in cevabını seviyorum! Git ve Dropbox'ı şimdi birlikte kullanıyorum ve iş akışım şöyle görünecek şekilde .bash_profile dosyamda birkaç takma ad kullanıyorum :

~/project $ git init
~/project $ git add .
~/project $ gcam "first commit"
~/project $ git-dropbox

Bunlar benim takma adım:

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'

Muhtemelen son şeyi takma ad olarak değil, bir kabuk betiği olarak kullanmam. Aksi takdirde bunu çok seviyorum. Awk kullanımı için ekstra kredi.
pauljohn32

6

Bu yöntemi (Dropbox'ta çıplak bir havuz oluşturmak) bir paylaşım klasöründe kullanırız .

Küçük bir geliştirici grubu, bu senkronize edilmiş depodan çekebilir ve yerel bir klon oluşturabilir. İş birimi tamamlandığında, başlangıç ​​noktasına geri dönüyoruz.

Eksik olduğum şeylerden biri, kaynak gönderme işlemi gerçekleştikten sonra değişiklik kümesi bilgileriyle birlikte bir e-postanın gönderilmesinin iyi bir yoludur. Değişiklikleri manuel olarak takip etmek için Google Wave'i kullanıyoruz.


81
Birisi Google Wave kullanıyor mu?
Kristopher Johnson

6

Mercurial'ı tavsiye edilen şekilde kullanıyorum ve özellikle makinelerin herhangi biri farklıysa dikkatli olmanızı öneriyorum. Dropbox forumları, kendiliğinden ortaya çıkan gizemli dosya adı dava sorunlarının şikayetleriyle doludur. Hg (ve Git'in varsayalım) rutin kontroller sırasında fark etmeyecek veya şikayet etmeyecek ve yolsuzluğu sadece gerçek bir şekilde kullanmaya çalıştığınızda bozuk bir repo şikayet ettiğinde duyacaksınız. Kötü haber. Sorun ve onun geçici çözümleri hakkında daha spesifik olabilir diliyorum; Ben hala bu karmaşayı kendim çıkarmaya çalışıyorum.


Mercurial ile aynı sorunu yaşadım
Tomba

git tasarım gereği yolsuzlukları diğerlerinden daha fazla kontrol ediyor. Yani en azından bunun ne zaman olacağını bileceksiniz ve sorunu düzeltebilirsiniz.
Anders

6

Ayrıca, depo yönetiminin tüm ayrıntılı ayrıntılarını bir avuç komutla (3-4) yapan açık kaynaklı bir proje (çapraz platform [Linux, Mac, Win] komut dosyaları koleksiyonu) vardır.

https://github.com/karalabe/gitbox/wiki

Örnek kullanım:

$ gitbox create myapp
Creating empty repository...
Initializing new repository...
Repository successfully created.

$ gitbox clone myapp
Cloning repository...
Repository successfully cloned.

Bundan sonra normal git kullanımı:

$ echo “Some change” > somefile.txt
$ git add somefile.txt
$ git commit –m “Created some file”
$ git push

Komut referansı ve öğreticiler için proje wiki ve kılavuzlarına bakın.


4

Github olmayan depolarımı Dropbox'ta saklıyorum. Karşılaştığım bir uyarı, yeniden yükleme işleminden sonra senkronize ediliyordu. Dropbox, büyük olanlara geçmeden önce en küçük dosyaları indirir. Geceleri başlar ve hafta sonu sonra geri gelirseniz sorun değil :-)

Konum - http://forums.dropbox.com/topic.php?id=29984&replies=6


4

2014'te Git ve Dropbox'ı yaklaşık bir buçuk yıldır sorunsuz bir şekilde kullanıyorum. Yine de bazı noktalar:

  • Dropbox kullanan tüm makinelerim Windows, farklı sürümlerde (7 ila 8) + 1 mac.
  • Depoyu başkasıyla paylaşmıyorum, bu yüzden değiştiren tek kişi benim.
  • git push uzak bir depoya iter, böylece bozulursa kolayca kurtarabilirim.
  • Ben de takma ad oluşturmak zorunda C:\Usersolan mklink /D link targetbazı kütüphaneler mutlak konumlara işaret çünkü.

3

Dan McNevin'in en çok oy alan cevabını seviyorum. Git komutları dizisini çok fazla kez bitirdim ve bir senaryo yapmaya karar verdim. İşte burada:

#!/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}"

Komut dosyası yalnızca bir proje adı gerektirir. ~/Dropbox/git/Belirtilen ad altında bir git deposu oluşturur ve geçerli dizinin tüm içeriğini yeni oluşturulan başlangıç ​​ana dalına iletir. Birden fazla proje adı verilirse, en sağdaki proje adı bağımsız değişkeni kullanılır.

İsteğe bağlı olarak, -r komut argümanı, kaynak ana öğeye gönderilecek uzak dalı belirtir. Proje kökeni yöneticisinin konumu -m argümanı ile de belirtilebilir. Varsayılan bir .gitignore dosyası da uzak dal dizinine yerleştirilir. Dizin ve .gitignore dosya varsayılanları kodda belirtilir.


3

Başka bir yaklaşım:

Şimdiye kadar en popüler olan @Dan yanıtı da dahil olmak üzere tüm cevaplar , git github, bitbucket vb.

Ancak, orijinal soru "Git ve Dropbox'ı etkili bir şekilde birlikte kullanmanın" gerçekten ne anlama geldiğini belirtmediğinden, başka bir yaklaşım üzerinde çalışalım: "Yalnızca çalışma ağacını senkronize etmek için Dropbox'ı kullanma."

Nasıl yapılır şu adımları içerir:

  1. Proje dizin içinde, tek bir boş oluşturur .git(örneğin dizin mkdir -p myproject/.git)

  2. .gitDropbox'ta dizinin senkronizasyonunu kaldırın. Dropbox Uygulaması kullanıyorsanız: Tercihler, Senkronizasyon ve .gitdizinin işaretinin kaldırılması gereken "senkronize edilecek klasörleri seçin" seçeneğine gidin . Bu, .gitdizini kaldıracaktır .

  3. git initproje dizininde çalıştır

.gitZaten varsa da çalışır , o zaman sadece 2 adımını yapın. Dropbox, web sitesinde git dosyalarının bir kopyasını tutacaktır.

Adım 2, Dropbox'ın bu yaklaşım için istenen sonuç olan git sistem yapısını senkronize etmemesine neden olacaktır.

Neden bu yaklaşım kullanılır?

  • Henüz itilmemiş değişikliklerin bir Dropbox yedeği olacak ve cihazlar arasında senkronize edilecek.

  • Dropbox'ın cihazlar arasında senkronizasyon yaparken bir şeyleri vidalaması git statusve git diffişleri sıralamak için kullanışlı olması durumunda.

  • Dropbox hesabında yer tasarrufu sağlar (tüm geçmiş orada saklanmaz)

  • Bu Dan'in cevap @ yorumlarda @dubek ve @Ates dile getirdiği endişeleri ve içinde @clu tarafından kaygıları önler başka bir yanıt .

Başka bir yerde bir uzaktan kumandanın (github, vb.) Varlığı bu yaklaşımla iyi sonuç verecektir.

Farklı dallarda çalışmak, aşağıdakilerle ilgilenilmesi gereken bazı sorunlar getirir:

  • Potansiyel bir sorun, farklı kollara bakıldığında Dropbox'ın (gereksiz yere?) Potansiyel olarak birçok dosyayı senkronize etmesidir.

  • İki veya daha fazla Dropbox senkronize edilmiş cihazın farklı şubeleri işaretliyse, her iki cihazda da taahhüt edilmemiş değişiklikler kaybolabilir,

Bu sorunların bir yolu da git worktreeşube çıkışlarını ayrı dizinlerde tutmaktır.


Sürüm kontrolünün iyi olacağı ancak iPad'de de (Dropbox senkronizasyonu ile) düzenlenebilir olacağı dosyalar üzerinde çalışan biri olarak, bu cevap bu kullanım durumunu kapsar.
Vagari

Hızlı takip, mevcut Dropbox davranışı farklı. Dropbox'ın kaldırılması ve senkronize edilmemesini söylemenin tam tersi, bulutta kalması, yerelden kaldırılması anlamına gelir. Ama bir çözümün süper kullanıcı yanıtı var. superuser.com/a/1527145/109561 Benim içinde dava (Mac'te) Aşağıdaki bayraklar görmezden için dosya, xattr -w com.dropbox.ignored 1 /path/to/somewhere.
Vagari

3

Benim 2 sent için Dropbox sadece merkezi bir repo ana bilgisayar almak rahatsız istemiyorum kişisel kullanım için sence. Herhangi bir profesyonel gelişim için muhtemelen zaten iş parçacığında birkaç kez belirtildiği gibi çözeceğinizden daha fazla sorun yaratacaksınız, Dropbox bu kullanım durumu için tasarlanmamıştır. Bununla birlikte, herhangi bir üçüncü taraf eklentisi veya aracı olmadan Dropbox'ta depoları boşaltmak için mükemmel bir güvenli yöntem demetleri kullanmaktır. .gitconfigYazma kaydetmek için benim aşağıdaki takma adları var :

[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 #"

Misal:

# 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

Benzer bir sorunla karşılaştım ve aynı şey için küçük bir senaryo oluşturdum. Fikir, Git ile Dropbox'ı olabildiğince basit kullanmaktır. Şu anda, Ruby kodunu hızlı bir şekilde uyguladım ve yakında daha fazlasını ekleyeceğim.

Komut dosyasına adresinden erişilebilir https://github.com/nuttylabs/box-git.


0

Üçüncü taraf entegrasyon araçlarını kullanmadan, durumu biraz geliştirebilir ve DropBox ve Git ile SpiderOak gibi diğer benzer bulut disk hizmetlerini kullanabilirim.

Amaç, kısmi bir durum yükleyebileceğinden ve daha sonra geri indirerek git durumunuzu tamamen bozacağından, bu dosya değişikliklerinin ortasında senkronizasyondan kaçınmaktır.

Bu sorunu önlemek için yaptım:

  1. Git dizinimi kullanarak bir dosyada topla git bundle create my_repo.git --all.
  2. Dosya izleme için anlık yerine örneğin 5 dakika gecikme ayarlayın. Bu, DropBox'ın bir değişikliğin ortasında kısmi bir durumu senkronize etme şansını azaltır. Ayrıca, bulut diskindeki dosyaları anında değiştirirken (anında kaydetme not alma uygulamalarında olduğu gibi) büyük ölçüde yardımcı olur.

Git durumunu tekrar karıştırmayacağının garantisi olmadığı için mükemmel değil, ama yardımcı oluyor ve şimdilik herhangi bir sorun alamadım.


0

MacOS'ta Dropbox'ı durdurabilir, değişikliklerinizi yapabilir ve ardından Dropbox'ı yeniden başlatabilirsiniz. Aşağıdaki kombinasyonu kullanıyorum ve bundan oldukça memnunum:

Her ikisinde de (yerel git yönetilen proje dizininiz ve Dropbox'ta bulunan uzak git deponuz) otomatik paketlemeyi devre dışı bırakmak için aşağıdaki komutu çalıştırın (dropbox senkronizasyonundaki ana sorun budur)

git config --global gc.auto 0

Ardından, zaman zaman dropbox devre dışı bırakıldığında depoları sıkıştırın. Örneğin, uygulamalarımın her yeni sürümünü aldığımda bash-build-script'imde aşağıdakileri yapıyorum.

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\""
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.