1136

GitDropboxを併用することはできますか?

4

20 に答える 20

1408

Git on Dropbox は素晴らしいと思います。いつも使っています。私は複数のコンピューター (自宅に 2 台、職場に 1 台) を持っており、Dropbox を中央のベア リポジトリとして使用しています。パブリック サービスでホストしたくないし、いつでも SSH できるサーバーにアクセスできないので、Dropbox はバックグラウンドで同期することでこれを処理します (非常に高速です)。

セットアップは次のようなものです。

~/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ディレクトリを複製するだけで (それが自分の Dropbox アカウントに属しているか、複数のアカウントで共有されているかに関係なく)、通常の Git 操作をすべて実行できます。これらの操作は、他のすべてのマシンに自動的に同期されます。

私はブログ記事「<a href="http://corrupt.net/2009/08/01/On-Version-Control/" rel="nofollow noreferrer">バージョン管理について」を書きました。私の環境設定。これは私のRuby on Rails開発経験に基づいていますが、実際には何にでも適用できます。

于 2009-12-25T17:10:40.737 に答える
137

これを行う正しい方法は、git-remote-dropbox を使用することです: https://github.com/anishathalye/git-remote-dropbox

Dropbox で独自のベア リポジトリを作成すると、多くの問題が発生します。アニッシュ (ライブラリの作成者)はそれを最もよく説明しています:

これらの問題の根本的な原因は、Dropbox デスクトップ クライアントが Git リポジトリではなく、ファイルを同期するように設計されていることです。Git リポジトリの特別な処理がなければ、Git と同じ保証は維持されません。リモート リポジトリでの操作はアトミックではなくなり、同時操作や同期の不運なタイミングにより、リポジトリが破損する可能性があります。

従来の Git リモートはサーバー側でコードを実行してこれを適切に機能させますが、それはできません。

解決策: これを適切に解決することは可能です。Dropbox で Git を使用することは可能であり、複数のユーザーと同時操作がある場合でも、従来の Git リモートと同じ安全性と一貫性が保証されます!

ユーザーにとっては、Git と Dropbox の間の透明な双方向ブリッジとして機能し、従来の Git リモートのすべての保証を維持する Git リモート ヘルパーである git-remote-dropbox を使用するのと同じくらい簡単です。共有フォルダーを使用しても安全なので、共同作業に使用できます (無制限の共同作業者と無制限のプライベート リポジトリを使用できます!)。

リモート ヘルパーを使用すると、Dropbox を Git リモートとして使用し、引き続き git clone、git pull、git push などの通常の Git コマンドをすべて使用でき、すべてが期待どおりに機能します。

于 2015-08-25T23:25:31.150 に答える
91

この回答は、Git ではなくMercurialの経験に基づいていますが、この経験によると、Dropbox をこのように使用すると、同じ Dropbox ベースのリポジトリをさまざまな時間に異なるマシン (Mac、 Unix、私の場合は Windows)。

うまくいかない可能性のあるものの完全なリストはありませんが、ここに私を悩ませた具体的な例を示します。各マシンには、行末文字の独自の概念と、ファイル名での大文字/小文字の処理方法があります。Dropbox と Git/Mercurial では、この処理が少し異なります (正確な違いは覚えていません)。Dropbox が Git/Mercurial の背後にあるリポジトリを更新すると、壊れたリポジトリになります。これは即座に目に見えない形で行われるため、リポジトリから何かを復元しようとするまで、リポジトリが壊れていることさえわかりません。

このようにして 1 つの混乱から掘り起こした後、私は次のレシピを使用して大成功を収め、問題の兆候はありませんでした. リポジトリを Dropbox から移動するだけです。それ以外はすべて Dropbox を使用してください。ドキュメント、JAR ファイル、何でもどうぞ。また、GitHub (Git) またはBitbucket (Mercurial) を使用して、リポジトリ自体を管理します。どちらも無料であるため、コストがかからず、各ツールがそれぞれの強みを発揮するようになりました.

Dropbox の上で Git/Mercurial を実行しても、リスク以外は何も追加されません。やらないでください。

于 2011-05-01T20:48:07.903 に答える
17

すべてのプロジェクトを1つのGitリポジトリに配置したくなかったし、プロジェクトごとにこのコードを実行したくなかったので、プロセスを自動化するBashスクリプトを作成しました。1つまたは複数のディレクトリで使用できるため、この投稿のコードを実行することも、複数のプロジェクトで同時に実行することもできます。

#!/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
于 2010-12-02T18:37:04.277 に答える
16

Dropbox を使用する小規模なチームに関して:

各開発者が Dropbox に独自の書き込み可能なベア リポジトリを持っていて、他の開発者にのみプルできる場合、これにより破損のリスクなしにコード共有が容易になります!

次に、集中型の「メインライン」が必要な場合は、1 人の開発者が自分のレポからすべてのプッシュを管理できます。

于 2012-12-04T12:27:00.093 に答える
15

Git と Dropbox を使用するのがよい方法だとは思いません... 両方の機能について考えてみてください。

ギット:

  • 中央リポジトリを持つことができます
  • 独自の変更を加えた独自のリポジトリを持つことができます
  • 中央リポジトリから変更を送受信できます
  • 複数の人が同じファイルを変更することを許可し、それらがそれらをマージするか、それができない場合はそれらをマージするように求めます
  • 中央リポジトリへのアクセスを許可する Web クライアントとデスクトップ クライアントがあります。

ドロップボックス:

  • すべてを中央リポジトリに保持
  • サーバー内に独自のバージョンのファイルを持つことができます
  • 中央リポジトリからの変更の送受信を強制します
  • 複数の人が同じファイルを変更すると、最初にコミットされたファイルが後のコミットに置き換えられ、面倒なマージが行われなくなります (そして間違いなく最大の欠点です)。
  • 中央リポジトリへのアクセスを許可する Web クライアントとデスクトップ クライアントがあります。

また、ファイルの一部を共有することに不安がある場合は、ファイルを暗号化してみませんか? そして、Git に対する Dropbox の最大の利点、つまり、公開ファイルと非公開ファイルを持つことができます...

于 2010-05-26T09:50:36.893 に答える
7

共有フォルダーでこの方法 (Dropbox にベア リポジトリを作成する) を使用します。

少数の開発者グループは、同期されたリポジトリからプルして、ローカル クローンを作成できます。作業単位が完了したら、原点に戻ります。

私が見逃していることの 1 つは、オリジンへのプッシュが発生したときに変更セット情報を電子メールで送信する良い方法です。Google Wave を使用して手動で変更を追跡しています。

于 2010-06-14T13:32:22.173 に答える
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'
于 2011-02-17T10:01:11.947 に答える
6

また、オープン ソース プロジェクト (クロス プラットフォーム [Linux、Mac、Win] スクリプトのコレクション) もあり、少数 (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.

その後、通常の git の使用法:

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

完全なコマンド リファレンスとチュートリアルについては、プロジェクトの wiki とマニュアルを確認してください。

于 2011-12-20T16:28:58.090 に答える
6

私は推奨される方法で Mercurial を使用してきましたが、特にマシンのいずれかが異なる場合は注意してください。Dropbox のフォーラムには、ファイル名の大文字と小文字の区別に関する不思議な問題が自然発生したという苦情でいっぱいです。Hg (そして Git だと思います) は定期的なチェックイン中に気付かなかったり文句を言ったりすることはありません。悪いニュース。問題とその回避策について、より具体的に教えていただければ幸いです。私はまだこの混乱から抜け出そうとしています。

于 2011-03-04T11:42:55.457 に答える
4

Github以外のリポジトリをDropboxに保存します。私が遭遇した1つの注意点は、再インストール後の同期でした。Dropboxは、大きいファイルに移動する前に、最初に小さいファイルをダウンロードします。夜に始めて週末の後に戻ってきても問題ありません:-)

私のスレッド-http://forums.dropbox.com/topic.php?id= 29984&replies =6

于 2011-02-17T07:08:37.463 に答える
2

私は同様の問題に直面し、同じための小さなスクリプトを作成しました。アイデアは、GitでDropboxをできるだけ簡単に使用することです。現在、 Rubyコードをすばやく実装しましたが、間もなく追加する予定です。

スクリプトには、からアクセスできますhttps://github.com/nuttylabs/box-git

于 2012-09-20T13:02:50.287 に答える
0

サードパーティの統合ツールを使用しなくても、条件を少し強化して、DropBox や、Git で SpiderOak などの他の同様のクラウド ディスク サービスを使用することができました。

目標は、これらのファイルの変更の途中で同期を回避することです。これは、部分的な状態をアップロードしてからダウンロードし直し、git の状態を完全に破壊する可能性があるためです。

この問題を回避するために、次のことを行いました。

  1. を使用して、私の git インデックスを 1 つのファイルにバンドルしますgit bundle create my_repo.git --all
  2. 瞬時ではなく、ファイル監視の遅延を設定します (例: 5 分)。これにより、DropBox が変更の途中で部分的な状態を同期する可能性が低くなります。また、クラウド ディスク上のファイルをオンザフライで変更する場合にも非常に役立ちます (メモを取るアプリケーションを瞬時に保存する場合など)。

gitの状態が再び台無しにならないという保証はないため、完璧ではありませんが、助けになり、今のところ問題はありませんでした。

于 2017-07-07T16:26:49.210 に答える