Câu hỏi Sử dụng Git và Dropbox cùng nhau hiệu quả?


Tôi làm cách nào để sử dụng Git và Dropbox cùng nhau hiệu quả?


1062
2017-12-25 08:41


gốc


Xem thêm Hướng dẫn của Bradley Wright. - Ron Romero
Nếu bạn chỉ là một nhóm nhỏ (lên đến 5 tôi nghĩ), sau đó BitBucket cung cấp lưu trữ miễn phí cho kho riêng. Trớ trêu thay sau đó tôi có repo địa phương của tôi trên DropBox, chỉ trong trường hợp tôi di chuyển giữa các máy tính khi tôi đang làm việc trên một cái gì đó. - Mark Adamson
Tôi không chắc chắn rằng dự phòng phiên bản của bạn là mỉa mai, nhưng nó có lẽ khá hữu ích - silasdavis
Câu hỏi này không rõ ràng. Sử dụng những công cụ này với nhau một cách hiệu quả có nghĩa là gì? Nó cũng quá rộng và có khả năng tạo ra các câu trả lời có ý kiến.
Hey bạn có thể vui lòng xem xét câu trả lời của tôi như là một trong những chính xác: stackoverflow.com/a/32215708/589667. Thư viện này tôi đề cập đến trong câu trả lời của tôi là một công cụ chính thức được xây dựng bởi các nhà phát triển dropbox để giúp mọi người sử dụng Git với Dropbox. - clu


Các câu trả lời:


Tôi nghĩ rằng Git trên Dropbox là tuyệt vời. Tôi sử dụng nó mọi lúc. Tôi có nhiều máy tính (hai ở nhà và một ở nơi làm việc) mà tôi sử dụng Dropbox như một kho chứa trần trung tâm. Vì tôi không muốn lưu trữ nó trên một dịch vụ công cộng, và tôi không có quyền truy cập vào một máy chủ mà tôi luôn có thể ssh, Dropbox sẽ chăm sóc điều này bằng cách đồng bộ hóa (rất nhanh) trong nền.

Thiết lập là một cái gì đó như thế này:

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

Từ đó, bạn chỉ có thể sao chép ~/Dropbox/git/project.git mà bạn đã liên kết với tài khoản Dropbox của bạn (hoặc đã chia sẻ thư mục này với mọi người), bạn có thể thực hiện tất cả các hoạt động Git bình thường và chúng sẽ được đồng bộ hóa với tất cả các máy khác của bạn một cách tự động.

Tôi đã viết một bài đăng blog, Trên phiên bản kiểm soát, (liên kết cũ  đã chết) về lý do của tôi và cách tôi thiết lập môi trường của mình, nó dựa trên Viên ngọc trên tay vịn phát triển kinh nghiệm, nhưng nó có thể được áp dụng cho bất cứ điều gì, thực sự.


1350
2017-12-25 17:10



Tôi tự hỏi điều gì sẽ xảy ra nếu bạn đẩy vào dropbox trần repo từ hai máy cùng một lúc. Nếu nó sẽ gây ra một sửa đổi trong một trong các tập tin nội bộ của git, dropbox sẽ cho bạn thấy có một cuộc xung đột - nhưng bạn sẽ làm gì sau đó? Chỉ cần chọn một trong các phiên bản, và sau đó đẩy lại từ cả hai máy (từng cái một)? - dubek
@ Dubek: Có lẽ bạn sẽ kết thúc việc phá hỏng repo trần được chia sẻ. Cách tiếp cận này chỉ thích hợp cho một nhóm nhỏ (hai trong trường hợp của tôi), nơi mọi người chỉ có thể hét lên trên bức tường tủ của họ: "Này! Không ai đẩy! Tôi đang đẩy ngay bây giờ!". - Ates Goral
@Ates: Ít nhất git được phân cấp, vì vậy nếu bạn quản lý để làm hỏng những thứ bạn có thể khôi phục nó từ bản sao cục bộ của ai đó. Nếu bạn có một đội ngũ lớn, rất có thể là có đủ tiền mặt cho một repo được lưu trữ ở đâu đó. - rdrey
Tôi đã quay lại trang này hơn năm lần để sử dụng chuỗi lệnh chính xác này. Tôi sẽ không bao giờ ghi nhớ chúng, nhưng cảm ơn vì đã cung cấp cho họ! - Jeremy Mack
@ Jo: Nó không đủ ghetto. - Ates Goral


Cách đúng để thực hiện điều này là sử dụng git-remote-dropbox: https://github.com/anishathalye/git-remote-dropbox

Tạo repo trần của riêng bạn trong Dropbox gây ra rất nhiều vấn đề. Anish (tác giả của thư viện) giải thích nó tốt nhất:

Nguyên nhân gốc rễ của những vấn đề này là máy tính để bàn Dropbox   máy khách được thiết kế để đồng bộ hóa các tệp, không phải kho lưu trữ Git. Không có   xử lý đặc biệt cho kho Git, nó không duy trì như cũ   đảm bảo như Git. Các hoạt động trên kho lưu trữ từ xa không còn   các hoạt động nguyên tử và đồng thời hoặc thời gian không may mắn với   đồng bộ hóa có thể dẫn đến một kho lưu trữ bị hỏng.

Bộ điều khiển Git truyền thống chạy mã ở phía máy chủ để thực hiện công việc này   đúng, nhưng chúng ta không thể làm điều đó.

Giải pháp: Có thể giải quyết điều này đúng cách. Có thể sử dụng   Git với Dropbox và có cùng sự bảo đảm an toàn và nhất quán   như một điều khiển từ xa Git truyền thống, ngay cả khi có nhiều người dùng và   hoạt động đồng thời!

Đối với người dùng, đơn giản như sử dụng git-remote-dropbox, điều khiển từ xa Git   helper hoạt động như cầu nối hai chiều trong suốt giữa Git và   Dropbox và duy trì tất cả các bảo đảm của một điều khiển từ xa Git truyền thống.   Nó thậm chí còn an toàn để sử dụng với các thư mục được chia sẻ, vì vậy nó có thể được sử dụng cho   hợp tác (yay không giới hạn repos tư nhân với không giới hạn   cộng tác viên!).

Với trình trợ giúp từ xa, có thể sử dụng Dropbox làm điều khiển từ xa Git   và tiếp tục sử dụng tất cả các lệnh Git thông thường như git clone, git   kéo, và git push, và mọi thứ sẽ hoạt động như mong đợi.


87
2017-08-25 23:25



Tôi rất vui khi thấy rằng ai đó đã đăng về git-remote-dropbox trên câu hỏi StackOverflow này. Tôi tự hỏi nếu có cách nào để có được phản ứng này gần hơn đến đỉnh. Phương pháp được đề xuất bởi câu trả lời được chấp nhận hiện tại là khá nguy hiểm và có thể dẫn đến hỏng kho. - fwenom
điều đó thật tuyệt. Tôi nhất định sẽ kiểm tra. nhưng khi tôi chuyển từ hộp dev này sang hộp dev khác và muốn tiếp tục làm việc trên repo được đồng bộ hóa, phương pháp này sẽ chỉ hoạt động nếu tôi luôn cam kết công việc của mình khi tôi rời khỏi máy A và muốn tiếp tục từ nơi tôi dừng lại máy B. Tôi có đúng không? nếu vậy, đây không phải là lý tưởng, vì nó sẽ dẫn đến một loạt các cam kết "tạm thời", mà người ta có thể tranh luận sẽ gây ô nhiễm lịch sử cam kết của repo. có lẽ tôi chỉ không thể có bánh của tôi và ăn nó quá! - bhu Boue vidya
@ bhuBouevidya Không, điều đó không đúng. Bạn không cần phải cam kết công việc của bạn cho những thay đổi bằng cách đồng bộ hóa. Miễn là các tập tin được lưu các tập tin sẽ được đồng bộ hóa. Về cơ bản nếu bạn có một loạt các tập tin sửa đổi trên một máy, các sửa đổi sẽ đồng bộ hóa với nhau bởi vì Dropbox chỉ quan tâm đến những gì đã được lưu vào đĩa. - clu
@clu: Có, bạn phải cam kết công việc của bạn và đẩy. Tất cả các git-remote-dropbox đó hoạt động như một trình trợ giúp từ xa git. Cũng giống như các điều khiển từ xa khác, các cam kết cục bộ của bạn sẽ không được đẩy tới điều khiển từ xa cho đến khi thực hiện xong việc đẩy. Cách để lấy các tệp đã sửa đổi cục bộ vào trong kho lưu trữ cục bộ để chúng có thể được đẩy bằng cách thực hiện một cam kết. Dropbox sẽ không biết bất cứ điều gì về các tập tin của bạn không có trong kho lưu trữ. - Ants
Chỉ cần tò mò nếu git-remote-dropbox là nền tảng chéo ... Tôi thấy nó sử dụng python, và tôi biết một số thứ python khác cho Dropbox là không phải nền tảng, ví dụ trên OS X dòng lệnh công cụ không tương thích. - Michael


Câu trả lời này được dựa trên Mercurial kinh nghiệm, không phải Git, nhưng kinh nghiệm này nói rằng sử dụng Dropbox theo cách này là yêu cầu các kho lưu trữ bị hỏng nếu có cơ hội bạn sẽ cập nhật cùng một kho lưu trữ dựa trên Dropbox từ các máy khác nhau tại các thời điểm khác nhau (Mac, Unix, Windows trong trường hợp của tôi) ).

Tôi không có một danh sách đầy đủ về những thứ có thể sai, nhưng đây là một ví dụ cụ thể làm tôi khó hiểu. Mỗi máy có khái niệm riêng của các ký tự kết thúc dòng và cách các ký tự chữ hoa / chữ thường được xử lý trong tên tệp. Dropbox và Git / Mercurial xử lý hơi khác một chút (tôi không nhớ lại sự khác biệt chính xác). Nếu Dropbox cập nhật kho lưu trữ đằng sau lưng của Git / Mercurial, mau, kho lưu trữ bị hỏng. Điều này xảy ra ngay lập tức và vô hình, vì vậy bạn thậm chí không biết kho lưu trữ của bạn bị hỏng cho đến khi bạn cố gắng phục hồi một cái gì đó từ nó.

Sau khi đào bới ra khỏi một mớ hỗn độn làm việc theo cách này, tôi đã sử dụng công thức sau đây với thành công lớn và không có dấu hiệu của vấn đề. Chỉ cần di chuyển kho lưu trữ của bạn ra khỏi Dropbox. Sử dụng Dropbox cho mọi thứ khác; tài liệu, Tệp JAR, bất cứ điều gì bạn vui lòng. Và sử dụng GitHub (Git) hoặc Cai Xô nhỏ (Mercurial) để quản lý kho lưu trữ. Cả hai đều miễn phí vì vậy điều này không làm tăng thêm chi phí, và mỗi công cụ bây giờ đóng vai trò quan trọng.

Chạy Git / Mercurial trên đầu trang của Dropbox không thêm gì ngoại trừ rủi ro. Đừng làm thế.


85
2018-05-01 20:48



Tôi cảm thấy rằng kho git đủ mạnh để không làm hỏng chính nó. Kinh nghiệm của tôi (hơn một năm sử dụng, chủ yếu là người dùng đơn, đa nền tảng, máy tính chéo, nhiều nhà phát triển), là việc repo của git không dễ bị hỏng. Trong git, chỉ có thông tin được thêm vào kho lưu trữ, các tệp hiện có chỉ còn lại một mình 99,9% thời gian (các tệp có thể thay đổi dễ dàng được kiểm tra thủ công). Đôi khi tôi thấy các trường hợp con trỏ nhánh bị ghi đè, nhưng điều này có thể dễ dàng nhìn thấy (tức là "nhánh (bản sao mâu thuẫn của XXX)") và bị xóa (thực sự không cần sửa chữa). - Egon
@Egon Miễn là bạn không bao giờ chạy git gc, điều này có thể xảy ra tự động ... - tc.
@tc: Bạn đúng, trong khi thu thập rác, thông tin không thể truy cập được xóa trong git. Tuy nhiên, tôi đoán rằng đối với hầu hết các trường hợp thực tế, điều này không ảnh hưởng đến độ mạnh: chỉ những thông tin không thể truy cập được cũ hơn 2 tuần bị ảnh hưởng (đó là thời gian dồi dào để DropBox đồng bộ hóa). Và tại thời điểm đó của một cuộc xung đột như vậy, tôi nghi ngờ hầu hết các thông tin sẽ có sẵn cả trong hình thức đóng gói và giải nén. - Egon
tôi nghĩ vậy kịch bản chia sẻ mã không có repo trung tâm (descibed trong một câu trả lời dưới đây) sẽ tiết kiệm một từ các tham nhũng có thể vì cập nhật đồng thời vào thư mục trong dropbox. Nếu một người cần một repo trung tâm, nó có thể được quản lý riêng biệt (và bị loại bỏ khỏi dropbox); dropbox sẽ giữ repos làm việc cá nhân (cũng thuận tiện vì bạn có thể cập nhật / kéo theo thời gian từ repo nguồn của người khác trong nhóm của bạn mà bạn dựa vào công việc). (Tôi đang thực sự dự tính sử dụng các darcs trong một thiết lập như vậy.) - imz -- Ivan Zakharyaschev
+1 Nếu bạn không muốn lưu trữ các kho lưu trữ của mình ở nơi công cộng, hãy sử dụng Cai Xô nhỏ, repos riêng tư miễn phí cho các nhóm lên đến 5 người dùng. - Christian Specht


Liên quan đến các nhóm nhỏ sử dụng Dropbox:

Nếu mỗi nhà phát triển có kho lưu trữ trống có thể ghi của riêng họ trên Dropbox, đó là kéo chỉ với các nhà phát triển khác, sau đó điều này tạo điều kiện chia sẻ mã mà không có nguy cơ tham nhũng!

Sau đó, nếu bạn muốn một 'đường chính' tập trung, bạn có thể có một nhà phát triển quản lý tất cả các push cho nó từ repo riêng của họ.


16
2017-12-04 12:27



Tuyệt vời quá! Ngoài ra, để bảo vệ repo tham nhũng từ nhiều viết bạn dễ dàng có thể làm cho nhiều người repos và đồng bộ chỉ thư mục .git của họ! Tất cả những gì bạn cần trong một khoảnh khắc - là để kéo từ nguồn gốc mong muốn! Đại P-to-P người đàn ông! Bạn hiểu triết lý git phi tập trung! - Brian Haak


Tôi không muốn đặt tất cả các dự án của mình dưới một kho lưu trữ Git, cũng như tôi không muốn đi vào và chạy mã này cho mọi dự án, vì vậy tôi đã thực hiện Bash tập lệnh sẽ tự động hóa quy trình. Bạn có thể sử dụng nó trên một hoặc nhiều thư mục - vì vậy nó có thể làm mã trong bài đăng này cho bạn hoặc nó có thể làm điều đó trên nhiều dự án cùng một lúc.

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

16
2017-12-02 18:37





Tôi không nghĩ rằng việc sử dụng Git và Dropbox là cách để đi ... Chỉ cần suy nghĩ về các tính năng của cả hai:

Git:

  • Cho phép bạn có một kho lưu trữ trung tâm
  • Cho phép bạn có kho lưu trữ của riêng bạn với các thay đổi của riêng bạn
  • Cho phép bạn gửi và nhận các thay đổi từ kho lưu trữ trung tâm
  • Cho phép nhiều người thay đổi cùng một tệp và họ kết hợp chúng hoặc yêu cầu bạn hợp nhất chúng nếu không thể thực hiện
  • Có máy khách web và máy tính để bàn để cho phép truy cập vào kho lưu trữ trung tâm

Dropbox:

  • Giữ mọi thứ trong một kho lưu trữ trung tâm
  • Cho phép bạn có phiên bản của riêng bạn của các tập tin trong máy chủ
  • Buộc bạn gửi và nhận các thay đổi từ kho lưu trữ trung tâm
  • Nếu nhiều người thay đổi cùng một tệp, tệp đầu tiên được cam kết sẽ được thay thế bằng các cam kết sau đó và không xảy ra sự hợp nhất nào gây phiền hà (và chắc chắn là bất lợi lớn nhất của nó)
  • Có máy khách web và máy tính để bàn để cho phép truy cập vào kho lưu trữ trung tâm.

Và nếu bạn lo lắng về việc chia sẻ một số tệp của mình, tại sao không mã hóa chúng? Và sau đó bạn có thể có được lợi thế lớn nhất của Dropbox to Git, tức là, có các tệp công khai và riêng tư ...


15
2018-05-26 09:50



Dropbox chỉ là một lựa chọn tốt cho một repo trung tâm. Nếu được đặt trong một đã chia sẻ thư mục nó thậm chí hoạt động cho các nhóm. - mac
Có, nhưng bạn sẽ không có các tính năng hợp nhất giống như trong git, trên thực tế nếu ai đó đang chỉnh sửa cùng một tệp với tệp của bạn và anh ấy lưu tệp sau bạn, các thay đổi của bạn sẽ bị mất, trừ khi bạn truy cập giao diện web và tải xuống phiên bản cũ (phiên bản của bạn). - Coyote21
Cái này sai. Dropbox không thả xung đột. Nó mang tên tệp của một bản chỉnh sửa và sử dụng tên kia cho tính liên tục. Bạn có thể tự mình hợp nhất chúng nếu bạn muốn. Đó là một sự thỏa hiệp tốt và không mất dữ liệu. dropbox.com/help/36 - Clueless
Có nhưng vì đây là về mã, tôi tốn ít thời gian hơn để kết hợp các tập tin với nhiều mã hơn, và trong một codebase bình thường nó có thể là hàng trăm xung đột cùng một lúc, tùy thuộc vào kích thước của dự án, và nó sẽ là một cơn ác mộng hợp nhất sau đó từng cái một, ngay cả với sự giúp đỡ của một công cụ hợp nhất như WinMerge (hoặc một cái gì đó giống nhau). - Coyote21


Bây giờ là năm 2015 và cách đây ba ngày, công cụ mới dựa trên API Dropbox phiên bản 2 đã được tạo ra để sử dụng an toàn git trên Dropbox. Nó hoạt động dựa trên API thay vì sử dụng ứng dụng khách trên máy tính để bàn và xử lý chính xác nhiều lần đồng thời đẩy tới một kho lưu trữ được lưu trữ trong một thư mục được chia sẻ.

Sau khi được cấu hình, nó cho phép một thiết lập từ xa git giống như bất kỳ điều khiển từ xa nào khác.

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

14
2017-08-23 07:31



Nó sẽ được tốt đẹp nếu một số mod sẽ hợp nhất tất cả các câu hỏi git-với-dropbox trên stackexchange dưới một superthread đề cập đến công cụ mới nhất đầu tiên. - Blair Houghton


Tôi sử dụng Mercurial (hoặc Git) + TrueCrypt + Dropbox cho được mã hóa xa sao lưu.

Điều thú vị nhất là Dropbox KHÔNG đồng bộ toàn bộ vùng chứa TrueCrypt nếu bạn sửa đổi một phần nhỏ mã của bạn. Thời gian đồng bộ là tỷ lệ thuận với số lượng thay đổi. Mặc dù nó được mã hóa, sự kết hợp của TrueCrypt + Dropbox làm cho việc sử dụng tuyệt vời của khối mật mã khối đồng bộ.

Thứ hai, một thùng chứa được mã hóa nguyên khối không chỉ bổ sung tính bảo mật, mà còn làm giảm cơ hội lưu trữ tham nhũng .

Thận trọng: Tuy nhiên bạn phải rất cẩn thận về việc không có container được gắn trong khi Dropbox đang chạy. Nó cũng có thể là một nỗi đau để giải quyết xung đột nếu 2 khách hàng khác nhau kiểm tra các phiên bản khác nhau cho vùng chứa. Vì vậy, nó chỉ thực tế cho một người sử dụng nó để sao lưu, không phải cho một nhóm.

Thiết lập:

  • Tạo một thùng chứa Truecrypt (nhiều Gigabyte là tốt)
  • Trong tùy chọn Truecrypt, bỏ chọn preserve modification timestamp*.
  • Tạo một repo như đã đề cập ở trên bởi Dan ( https://stackoverflow.com/a/1961515/781695 )

Sử dụng:

  • Thoát Dropbox
  • Gắn vùng chứa, đẩy các thay đổi của bạn, hủy kết nối
  • Chạy dropbox

P.S. Bỏ chọn preserve modification timestamp nói với dropbox rằng tệp đã được sửa đổi và nó phải được sync'd. Lưu ý rằng việc gắn vùng chứa sửa đổi dấu thời gian ngay cả khi bạn không thay đổi bất kỳ tệp nào trong đó. Nếu bạn không muốn điều đó xảy ra, chỉ cần gắn kết âm lượng read-only


8
2018-03-03 16:18



Nó sẽ khác nhiều nếu sử dụng hình ảnh tệp .dmg được mã hóa macos, liệu thời gian đồng bộ có còn tỉ lệ thuận với những thay đổi không? - IBrum
@IBrum Xin lỗi, tôi chưa thử với tệp .dmg - user