Git과 Dropbox를 효과적으로 함께 사용하십니까?


1132

GitDropbox 를 효과적으로 함께 사용하려면 어떻게해야 합니까?


2
Bradley Wright의 튜토리얼 도 참조하십시오 .
Ron Romero

39
소규모 팀 (최대 5 명) 인 경우 BitBucket은 개인 리포지토리에 대한 무료 호스팅을 제공합니다. 아이러니하게도 작업중인 컴퓨터간에 이동할 경우를 대비하여 DropBox에 로컬 리포지토리가 있습니다.
Mark Adamson

12
나는 당신의 버저 닝 리던던시가 아이러니하다는 것을 확신하지 못하지만 아마도 매우 유용 할 것입니다
silasdavis

2
이 질문은 명확하지 않습니다. 이러한 도구를 "효과적으로"함께 사용한다는 것은 무엇을 의미합니까? 또한 너무 광범위하여 의견이있는 답변을 생성 할 수 있습니다.

3
저의 대답을 올바른 답변으로 간주하십시오 : stackoverflow.com/a/32215708/589667 . 내 답변에서 언급 한이 라이브러리는 Dropbox 개발자가 Dropbox와 함께 Git을 사용할 수 있도록 도와주는 공식 도구입니다.
clu

답변:


1401

Dropbox의 Git이 훌륭하다고 생각합니다. 나는 항상 그것을 사용합니다. Dropbox를 중앙 저장소로 사용하는 여러 대의 컴퓨터 (집에 2 대, 직장에 1 대)가 있습니다. 공용 서비스에서 호스팅하고 싶지 않고 항상 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.gitDropbox 계정과 연결된 (또는이 디렉토리를 사람들과 공유 한) 복제 를 수행 할 수 있으며 모든 일반 Git 작업을 수행 할 수 있으며 다른 모든 시스템과 자동으로 동기화됩니다.

내 추론과 환경 설정 방법에 관한 블로그 게시물 인 On Version Control ( Old link dead )을 작성했습니다. 루비 온 레일즈 개발 경험을 기반으로 하지만 실제로는 무엇이든 적용 할 수 있습니다.


61
두 대의 컴퓨터에서 Dropbox Bare Repo로 동시에 푸시하면 어떻게 될지 궁금합니다. git의 내부 파일 중 하나에서 수정이 발생하면 dropbox에 충돌이 있음을 표시하지만 어떻게해야합니까? 버전 중 하나를 선택한 다음 두 시스템에서 하나씩 다시 밀어 넣으십시오.
dubek

162
@ dubek : 아마도 공유 베어 저장소를 손상시킬 수 있습니다. 이 방법은 사람들이 칸막이 벽을 외치며 소리를 질 수있는 소규모 팀 (제 경우에는 2 명)에게만 적합합니다. "이봐!
Ates Goral

50
@Ates : 적어도 git은 분산되어 있으므로 손상된 것을 관리하는 경우 누군가의 로컬 복사본에서 복원 할 수 있습니다. 큰 팀이 있다면 어딘가에 호스트 리포지토리를위한 충분한 현금이있을 수 있습니다.
rdrey

75
이 정확한 순서의 명령을 사용하기 위해이 페이지로 5 번 이상 돌아 왔습니다. 나는 그들을 암기하지 않을 것입니다, 그러나 그들을 제공해 주셔서 감사합니다!
Jeremy Mack

32
@ 조 : 그것은 빈민가 충분하지 않습니다.
Ates Goral

126

이를 수행하는 올바른 방법은 git-remote-dropbox를 사용하는 것입니다 : https://github.com/anishathalye/git-remote-dropbox

Dropbox에서 나만의 리포지토리를 만들면 많은 문제가 발생합니다. Anish (도서관 제작자) 가 가장 잘 설명합니다 .

이러한 문제의 근본 원인은 Dropbox 데스크톱 클라이언트가 Git 리포지토리가 아닌 파일을 동기화하도록 설계 되었기 때문입니다. Git 리포지토리에 대한 특별한 처리가 없으면 Git과 동일한 보장을 유지하지 않습니다. 원격 저장소에서의 조작은 더 이상 원자 적이 지 않으며 동기화와의 동시 조작 또는 운이 좋지 않은 타이밍으로 인해 저장소가 손상 될 수 있습니다.

기존의 Git 리모컨은 서버 측에서 코드를 실행하여 올바르게 작동하지만 그렇게 할 수는 없습니다.

솔루션 :이 문제를 올바르게 해결할 수 있습니다. Dropbox와 함께 Git을 사용할 수 있으며 여러 사용자와 동시 작업이있는 경우에도 기존 Git 리모컨과 동일한 안전성 및 일관성을 보장합니다!

사용자에게는 Git과 Dropbox 사이의 투명한 양방향 브리지 역할을하며 전통적인 Git 리모컨의 모든 보증을 유지하는 Git 원격 헬퍼 인 git-remote-dropbox를 사용하는 것만 큼 간단합니다. 공유 폴더와 함께 사용해도 안전하므로 공동 작업에 사용할 수 있습니다 (무제한 공동 작업자가있는 무제한 개인 저장소).

원격 도우미를 사용하면 Dropbox를 Git 원격으로 사용하고 git clone, git pull 및 git push와 같은 모든 일반 Git 명령을 계속 사용할 수 있으며 모든 것이 예상대로 작동합니다.


8
누군가이 StackOverflow 질문에 git-remote-dropbox에 대해 게시 한 것을 기쁘게 생각합니다. 이 반응을 정상에 더 가깝게 할 수있는 방법이 있는지 궁금합니다. 현재 허용되는 답변에서 권장하는 방법은 매우 위험하며 저장소가 손상 될 수 있습니다.
fwenom

1
정말 멋지다. 꼭 확인하겠습니다. 그러나 한 dev 상자에서 다른 dev 상자로 이동하고 동기화 된 저장소에서 계속 작업하려는 경우이 방법은 기계 A를 떠날 때 항상 작업을 커밋하고 중단 한 부분을 선택하려는 경우에만 작동합니다 기계 B. 맞습니까? 만약 그렇다면, "임시"커밋의 혼란을 초래할 수 있기 때문에 이것은 이상적인 것이 아닙니다. 레포의 커밋 이력을 오염시킬 수 있습니다. 어쩌면 난 그냥 내 케이크를 가지고 그것을 먹을 수 없어!
bhu Boue vidya

@bhuBouevidya 아니요 사실이 아닙니다. 변경 사항을 동기화하기 위해 작업을 커밋 할 필요는 없습니다. 파일이 저장되어 있으면 파일이 동기화됩니다. 기본적으로 한 시스템에 여러 개의 수정 된 파일이있는 경우 Dropbox는 디스크에 저장된 내용 만 고려하므로 수정 사항이 다른 시스템과 동기화됩니다.
clu

2
@clu : 그렇습니다. 당신은 일을 저지르고 밀어야합니다. git-remote-dropbox가하는 일은 git remote helper의 역할을하는 것입니다. 다른 리모컨과 마찬가지로 푸시가 완료 될 때까지 로컬 커밋이 원격으로 푸시되지 않습니다. 푸시 할 수 있도록 로컬로 수정 된 파일을 로컬 저장소로 가져 오는 방법은 커밋을 수행하는 것입니다. Dropbox는 리포지토리에없는 파일에 대해서는 아무것도 모릅니다.
개미

2
git-remote-dropbox가 크로스 플랫폼 인 경우 궁금합니다 ... 파이썬을 사용하는 것을 보았습니다. 예를 들어 Dropbox의 다른 파이썬은 크로스 플랫폼 이 아닙니다. 예를 들어 OS X의 경우 명령 줄 항목이 호환되지 않습니다.
Michael

89

이 답변은 Git이 아닌 Mercurial 경험을 기반으로 하지만이 방법으로 Dropbox를 사용하면 여러 시간에 다른 컴퓨터에서 동일한 Dropbox 기반 저장소를 업데이트 할 가능성이있는 경우 손상된 저장소를 요구한다고합니다 (Mac, 유닉스, 내 경우에는 Windows).

나는 잘못 될 수있는 것들의 전체 목록을 가지고 있지는 않지만 여기에 나에게 맞는 구체적인 예가 있습니다. 각 기계에는 고유 한 줄 끝 문자 개념과 파일 이름에서 대문자 / 소문자를 처리하는 방법이 있습니다. Dropbox와 Git / Mercurial은 이것을 약간 다르게 처리합니다 (정확한 차이점은 기억 나지 않습니다). Dropbox가 Git / Mercurial의 저장소, 손상된 저장소 뒤에있는 저장소를 업데이트하면 손상됩니다. 이것은 즉각적으로 보이지 않게 발생하므로 저장소에서 무언가를 복구하려고 할 때까지 저장소가 손상되었다는 것을조차 알지 못합니다.

이런 식으로 일을하는 한 엉망에서 파낸 후, 나는 큰 성공과 문제의 흔적없이 다음과 같은 레시피를 사용했습니다. Dropbox에서 리포지토리를 옮기기 만하면됩니다. 다른 모든 작업에는 Dropbox를 사용하십시오. 설명서, JAR 파일 등 원하는 내용이 있습니다. 그리고 GitHub (Git) 또는 Bitbucket (Mercurial)을 사용하여 리포지토리 자체를 관리하십시오. 둘 다 무료이므로 비용에 아무런 영향을 미치지 않으며 이제 각 도구의 장점이 있습니다.

Dropbox 위에서 Git / Mercurial을 실행하면 위험 외에는 아무것도 추가되지 않습니다. 하지마


13
git 저장소는 스스로를 손상시키지 않을 정도로 견고하다고 생각합니다. 내 경험 (주로 단일 사용자, 크로스 플랫폼, 컴퓨터 간, 여러 개발자)의 사용 경험에 따르면 git의 저장소는 쉽게 손상되지 않습니다. git에서는 정보 만 저장소에 추가되고 기존 파일은 99.9 %의 시간으로 유지됩니다 (변경 가능한 파일은 대부분 수동으로 쉽게 검사 할 수 있음). 브랜치 포인터를 덮어 쓴 경우가 종종 있지만,이를 쉽게 볼 수 있습니다 (예 : "branch (XXX의 충돌 사본)").
Egon

1
@ tc : 가비지 수집 중에 도달 할 수없는 정보는 자식에서 제거됩니다. 그러나 대부분의 실제 경우에는 견고성에 해를 끼치 지 않습니다. 2 주보다 오래된 연결할 수없는 정보 만 영향을받습니다 (DropBox가 동기화하는 데 충분한 시간 임). 그리고 그러한 갈등의 순간에, 나는 대부분의 정보가 포장 된 형태와 포장되지 않은 형태로 제공 될 것으로 생각합니다.
Egon

내가 생각 하는 중앙의 repo와 코드 공유 시나리오 (아래 답변에서 통해 VII)이 있기 때문에 보관에 디렉토리에 대한 동시 업데이트 가능한 손상에서 하나를 저장합니다. 중앙 저장소가 필요한 경우 별도로 관리 할 수 ​​있습니다 (dropbox 외부). dropbox는 개인 작업 저장소를 보유 할 것입니다 (이는 작업중인 팀의 다른 사람의 소스 저장소에서 수시로 업데이트 / 풀링 할 수 있기 때문에 편리함). (실제로 이런 설정에서 darcs를 사용하여 고민하고 있습니다.)
imz-Ivan Zakharyaschev

5
+1 리포지토리를 공개적으로 호스팅하지 않으려면 Bitbucket을 사용하십시오 . 프라이빗 리포지는 최대 5 명의 사용자에게 무료로 제공됩니다.
Christian Specht

Windows 시스템과 OSX 시스템 사이에서 주목 한 사항 중 하나는 파일 권한으로 인해 diff 문제가 발생할 수 있다는 것입니다. "git config core.fileMode false"
devdrc

16

Dropbox를 사용하는 소규모 팀과 관련하여 :

각 개발자가 다른 개발자 에게만 제공 되는 Dropbox에 자체 쓰기 가능한 베어 리포지토리 가있는 경우 손상 위험없이 코드를 공유 할 수 있습니다!

그런 다음 중앙 집중식 '기본'을 원하면 한 개발자가 자신의 리포지토리에서 모든 푸시를 관리하도록 할 수 있습니다.


1
대단해! 또한 여러 번의 쓰기로 인한 저장소 손상을 방지하기 위해 MULTIPLE 저장소를 쉽게 만들고 .git 폴더 만 동기화 할 수 있습니다! 당신이 순간에 필요한 모든 것-원하는 원점에서 당기는 것입니다! 위대한 P 대 P 남자! 분산 된 자식의 철학을 이해합니다!
Brian Haak

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를 사용하는 것이 좋은 방법이라고 생각하지 않습니다. 두 기능의 특징 만 생각하면됩니다.

힘내 :

  • 중앙 저장소를 가질 수 있습니다
  • 자신의 변경 사항이있는 자체 저장소를 가질 수 있습니다
  • 중앙 저장소에서 변경 사항을주고받을 수 있습니다.
  • 여러 사람이 같은 파일을 변경하도록 허용하고 파일을 병합하거나 파일을 병합 할 수없는 경우 병합하도록 요청합니다
  • 중앙 저장소에 액세스 할 수있는 웹 및 데스크탑 클라이언트가 있습니다.

드롭 박스:

  • 중앙 저장소에 모든 것을 유지
  • 서버에 자신의 파일 버전을 가질 수 있습니다
  • 중앙 저장소에서 변경 사항을주고 받도록합니다.
  • 여러 사람이 동일한 파일을 변경하면 커밋 된 첫 번째 파일이 나중에 커밋으로 바뀌고 번거로운 병합이 발생하지 않습니다 (그리고 가장 큰 단점).
  • 중앙 저장소에 액세스 할 수있는 웹 및 데스크탑 클라이언트가 있습니다.

그리고 파일 일부를 공유하는 것이 걱정된다면 왜 파일을 암호화하지 않습니까? 그리고 Dropbox를 Git에 가장 큰 이점, 즉 공개 및 개인 파일을 보유 할 수 있습니다.


Dropbox는 중앙 저장소에 적합한 옵션입니다. 공유 폴더에 배치하면 그룹에서도 작동합니다.
mac

예, 그러나 git에서와 동일한 병합 기능을 갖지 못합니다. 실제로 누군가가 귀하의 파일과 동일한 파일을 편집하고 파일을 저장하면 웹 인터페이스로 이동하여 다운로드하지 않으면 변경 사항이 손실됩니다 이전 버전 (귀하의 버전).
Coyote21

8
이것은 잘못이다. Dropbox는 충돌을 제거하지 않습니다. 한 편집의 파일 이름을 엉망으로 만들고 다른 편집을 연속성을 위해 사용합니다. 원하는 경우 직접 수동으로 병합 할 수 있습니다. 좋은 타협이며 데이터를 잃지 않습니다. dropbox.com/help/36
Clueless

5
예. 그러나 이것은 코드에 관한 것이기 때문에 파일을 병합하는 데 소요되는 시간이 적을수록 더 많은 코드를 생성 할 수 있으며 일반적인 코드베이스에서는 프로젝트 크기에 따라 한 번에 수백 개의 충돌이 발생할 수 있습니다. WinMerge (또는 이와 유사한 것)와 같은 병합 도구를 사용해도 하나씩 병합합니다.
Coyote21

15

이제 2015 년이되었으며 3 일 전부터 Dropbox에서 git을 안전하게 사용할 수 있도록 Dropbox API v2를 기반으로 하는 새로운 도구 가 만들어졌습니다. 데스크톱 클라이언트를 사용하지 않고 API에 대해 작동하며 공유 폴더에서 호스팅되는 저장소에 대한 여러 동시 푸시를 올바르게 처리합니다.

일단 구성되면, 다른 git remote와 똑같이 git remote를 설정할 수 있습니다.

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

2
일부 모드가 최신 항목을 먼저 언급하는 수퍼 스레드에서 stackexchange에 대한 많은 git-with-dropbox 질문을 병합하면 좋을 것입니다.
블레어 휴턴

9

암호화 된 원격 백업을 위해 Mercurial (또는 Git) + TrueCrypt + Dropbox를 사용 합니다.

가장 멋진 점은 코드의 작은 부분을 수정하면 Dropbox가 전체 TrueCrypt 컨테이너를 동기화하지 않는다는 것입니다. 동기화 시간은 변경 량에 대략 비례합니다. 암호화되어 있지만 TrueCrypt + Dropbox의 조합은 블록 암호 + 블록 수준 동기화를 훌륭하게 사용합니다.

둘째, 모 놀리 식 암호화 컨테이너는 보안을 강화할뿐만 아니라 리포지토리 손상 가능성을 줄 입니다.

주의 : 그러나 Dropbox가 실행되는 동안 컨테이너를 마운트하지 않도록주의해야합니다. 두 명의 서로 다른 클라이언트가 다른 버전을 컨테이너에 체크인하면 충돌을 해결하기가 어려울 수도 있습니다. 따라서 팀이 아닌 백업을 위해 한 사람 만 사용하는 것이 실용적입니다.

설정:

  • Truecrypt 컨테이너를 만듭니다 (여러 기가 바이트는 괜찮습니다)
  • Truecrypt 환경 설정에서 preserve modification timestamp*를 선택 취소하십시오 .
  • Dan이 위에서 언급 한대로 리포지토리를 만듭니다 ( https://stackoverflow.com/a/1961515/781695 ).

용법:

  • Dropbox 종료
  • 컨테이너를 마운트하고 변경 사항을 푸시합니다
  • 보관 용 계정 실행

PS 체크 preserve modification timestamp박스를 해제하면 파일이 수정되었고 동기화되어야 함을 dropbox 에 알립니다. 컨테이너를 마운트하면 파일을 변경하지 않아도 타임 스탬프가 수정됩니다. 그렇게하지 않으려면 볼륨을 다음과 같이 마운트하십시오.read-only


macos로 암호화 된 .dmg 파일 이미지를 사용하는 경우 동기화 시간이 여전히 변경 사항에 비례 하는가?
IBrum

@IBrum 죄송합니다. .dmg 파일로 시도하지 않았습니다
사용자

7

나는 Dan McNevin의 답변을 좋아합니다! 지금도 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'

나는 아마도 마지막 것을 별명으로 사용하지 않고 쉘 스크립트로 사용합니다. 그렇지 않으면 나는 이것을 매우 좋아합니다. awk 사용에 대한 추가 크레딧.
pauljohn32

6

공유 폴더 에서이 방법 (Dropbox에서 베어 리포지토리 생성)을 사용 합니다 .

소규모 개발자 그룹이 베어 동기화 저장소에서 가져와 로컬 클론을 생성 할 수 있습니다. 작업 단위가 완료되면 원점으로 돌아갑니다.

내가 놓친 것 중 하나는 원점으로 푸시가 발생하면 변경 세트 정보와 함께 전자 메일을 보내는 좋은 방법입니다. Google Wave를 사용하여 변경 사항을 수동으로 추적하고 있습니다.


81
누군가 구글 웨이브를 사용하고 있습니까?
Kristopher Johnson

6

나는 Mercurial을 권장 된 방식으로 사용하고 있으며 특히 기계가 다른 경우 조심해야합니다. Dropbox fora는 자발적으로 나타나는 신비한 파일 이름 사례 문제에 대한 불만으로 가득합니다. Hg (그리고 Git을 추측합니다)는 일상적인 체크인 중에 통지하거나 불평하지 않으며 실제 사용하려고 할 때 손상된 저장소에 대해 불평 할 때만 손상에 대해 듣게됩니다. 나쁜 소식. 문제와 해결 방법에 대해 더 구체적으로 설명해주십시오. 나는 아직도이 엉망으로부터 스스로를 파 내려고 노력하고있다.


나는 수은과 같은 문제를 가지고 있었다
Tomba

git은 의도적으로 다른 것들보다 부패를 검사합니다. 따라서 최소한 언제 발생하는지 알고 문제를 해결할 수 있습니다.
Anders

6

소수의 (3-4) 명령으로 리포지토리 관리의 모든 세부 사항을 수행하는 오픈 소스 프로젝트 (크로스 플랫폼 [Linux, Mac, Win] 스크립트 모음)도 있습니다.

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

전체 명령 참조 및 학습서에 대해서는 프로젝트 위키 및 매뉴얼을 확인하십시오.


4

Github 이외의 저장소를 Dropbox에 저장합니다. 내가 만난 한 가지주의 사항은 재설치 후 동기화하는 것이 었습니다. Dropbox는 가장 큰 파일로 이동하기 전에 가장 작은 파일을 먼저 다운로드합니다. 밤에 시작하여 주말 후에 다시 돌아 오면 문제가되지 않습니다 :-)

내 스레드 -http : //forums.dropbox.com/topic.php ? id=29984&replies=6


4

이제 2014 년에 Git and Dropbox를 약 1 년 반 동안 문제없이 사용했습니다. 그래도 몇 가지 사항 :

  • Dropbox를 사용하는 모든 컴퓨터는 Windows, 다른 버전 (7 ~ 8) + 1 mac에 있습니다.
  • 리포지토리를 다른 사람과 공유하지 않으므로이를 수정할 수있는 유일한 사람입니다.
  • git push 원격 저장소로 푸시되어 손상되면 쉽게 복구 할 수 있습니다.
  • 나는에 별칭을 만들어야했습니다 C:\Usersmklink /D link target일부 라이브러리는 절대 위치로 지적되었다 때문이다.

3

나는 Dan McNevin의 최고 투표 답변을 좋아합니다. 나는 git 명령 시퀀스를 너무 여러 번 끝내고 스크립트를 만들기로 결정했습니다. 그래서 여기 있습니다 :

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

스크립트에는 프로젝트 이름 만 필요합니다. git 저장소를 생성합니다.~/Dropbox/git/지정된 이름 하고 현재 디렉토리의 전체 내용을 새로 작성된 원점 마스터 분기로 푸시합니다. 둘 이상의 프로젝트 이름이 제공되면 가장 오른쪽의 프로젝트 이름 인수가 사용됩니다.

선택적으로 -r 명령 인수는 원점 마스터로 푸시 할 원격 분기를 지정합니다. -m 인수를 사용하여 프로젝트 원점 마스터의 위치를 ​​지정할 수도 있습니다. 기본 .gitignore 파일도 원격 분기 디렉토리에 있습니다. 디렉토리 및 .gitignore 파일 기본값은 스크립트에 지정되어 있습니다.


3

다른 접근법 :

가장 인기있는 @Dan 답변 을 포함한 지금까지의 모든 답변 은 github, bitbucket 등과 같은 git에 초점을 맞춘 서비스 대신 Dropbox를 사용하여 공유 저장소를 중앙 집중화한다는 아이디어를 해결합니다.

그러나 원래 질문에 "Git과 Dropbox를 효과적으로 함께 사용하는 것"의 의미가 구체적으로 명시되어 있지 않기 때문에 "droptree를 사용하여 작업 트리 만 동기화"라는 또 다른 접근법을 시도해 봅시다.

방법에는 다음 단계가 있습니다.

  1. 프로젝트 디렉토리 내에서, 하나는 빈 생성 .git(예 : 디렉토리 mkdir -p myproject/.git)

  2. .gitDropbox 에서 디렉토리를 동기화 해제하십시오 . Dropbox 앱을 사용하는 경우 : 환경 설정, 동기화 및 "동기화 할 폴더 선택"으로 이동하여 .git디렉토리를 표시 해제해야합니다. .git디렉토리 가 제거됩니다 .

  3. git init프로젝트 디렉토리에서 실행

.git이미 존재하는 경우에도 작동합니다. 2 단계 만 수행하십시오. Dropbox는 웹 사이트에 git 파일의 사본을 보관합니다.

2 단계에서는 Dropbox가 git 시스템 구조를 동기화하지 않도록하는데, 이는이 접근 방식의 바람직한 결과입니다.

왜이 방법을 사용합니까?

  • 아직 푸시되지 않은 변경 사항은 Dropbox 백업을 가지며 장치간에 동기화됩니다.

  • 경우 보관 용 나사 일까지에서 장치 간 동기화, 때 git statusgit diff물건을 분류하기 편리 할 것입니다.

  • Dropbox 계정의 공간을 절약합니다 (전체 기록이 저장되지 않음)

  • @Dan의 답변에 대한 의견에서 @dubek 및 @Ates가 제기 한 문제와 다른 답변 에서 @clu의 문제를 피 합니다.

다른 곳 (github 등)에 리모컨이 있으면이 방법으로 잘 작동합니다.

다른 지점에서 작업하면 다음과 같은 문제를 해결해야합니다.

  • 잠재적 인 문제 중 하나는 다른 분기를 체크 아웃 할 때 Dropbox (불필요하게?)가 잠재적으로 많은 파일을 동기화하는 것입니다.

  • 두 개 이상의 Dropbox 동기화 기기에 서로 다른 분기가 체크 아웃되어 있으면 두 기기에 대한 커밋되지 않은 변경 사항이 손실 될 수 있습니다.

이러한 문제를 해결하는 한 가지 방법은 git worktree분기 체크 아웃을 별도의 디렉토리에 유지하는 데 사용 하는 것입니다.


버전 관리는 좋을뿐만 아니라 Dropbox 동기화를 통해 iPad에서도 편집 할 수있는 파일을 작업하는 사람으로서이 답변은 해당 사용 사례를 다룹니다.
Vagari

빠른 후속 조치, 현재 Dropbox 동작이 다릅니다. Dropbox를 제거하고 동기화하지 말라고하면 반대가되고 클라우드에 머무르며 로컬에서 제거됩니다. 그러나 솔루션에 대한 수퍼 유저 답변이 있습니다. superuser.com/a/1527145/109561 필자의 경우 (Mac의 경우) 다음은 무시하도록 파일에 플래그를 지정합니다 xattr -w com.dropbox.ignored 1 /path/to/somewhere.
Vagari

3

내 2 센트의 경우 Dropbox는 중앙 리포지토리 호스트를 귀찮게하고 싶지 않은 개인 용도로만 사용합니다. 스레드에서 이미 언급했듯이 전문적인 개발을 위해 해결해야 할 것보다 더 많은 문제가 발생할 수 있습니다. Dropbox는이 사용 사례를 위해 설계되지 않았습니다. 즉, 타사 플러그인이나 도구없이 Dropbox에서 저장소를 덤프하는 완벽한 안전한 방법은 번들을 사용하는 것입니다. .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

비슷한 문제에 직면하여 동일한 스크립트를 작성했습니다. 아이디어는 가능한 한 간단하게 Git과 함께 Dropbox를 사용하는 것입니다. 현재 Ruby 코드를 빠르게 구현 했으며 곧 추가 할 예정입니다.

스크립트는에서 액세스 할 수 있습니다 https://github.com/nuttylabs/box-git.


0

타사 통합 도구를 사용하지 않고도 조건을 약간 강화하고 DropBox 및 SpiderOak with Git과 같은 다른 유사한 클라우드 디스크 서비스를 사용할 수 있습니다.

목표는 이러한 파일 수정 중에 동기화를 피하는 것입니다. 부분 상태를 업로드 한 다음 다시 다운로드하여 git 상태를 완전히 손상시킬 수 있기 때문입니다.

이 문제를 피하기 위해 다음과 같이했습니다.

  1. 을 사용하여 내 자식 인덱스를 하나의 파일에 묶습니다 git bundle create my_repo.git --all.
  2. 파일 모니터링에 대한 지연 (예 : 5 분)을 순간 대신에 설정하십시오. 이렇게하면 DropBox가 변경 중에 부분 상태를 동기화 할 가능성이 줄어 듭니다. 또한 클라우드 디스크의 파일을 즉석에서 수정하는 경우 (예 : 즉시 메모 작성 앱 저장)에도 크게 도움이됩니다.

그것은 git 상태를 다시 엉망으로 만들지 않을 것이라는 보장이 없으므로 완벽하지는 않지만 도움이되며 현재 아무런 문제가 발생하지 않았습니다.


0

MacOS에서는 Dropbox를 중지하고 변경 한 다음 Dropbox를 다시 시작하면됩니다. 다음 조합을 사용하고 있으며 매우 만족합니다.

로컬 git 관리 프로젝트 디렉토리와 Dropbox에있는 원격 git 저장소 모두에서 자동 압축을 비활성화하려면 다음 명령을 실행하십시오 (dropbox 동기화의 주요 문제점).

git config --global gc.auto 0

그런 다음 때때로 보관함을 사용하지 않도록 설정하여 리포지토리를 압축하십시오. 예를 들어 앱을 새로 릴리스 할 때마다 bash-build-script에서 다음을 수행합니다.

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\""
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.