Secara efektif menggunakan Git dan Dropbox bersama?

Bagaimana cara menggunakan Git dan Dropbox bersama secara efektif?

1065
25 дек. ditetapkan oleh n1kh1lp 25 des . 2009-12-25 11:41 '09 pada 11:41 2009-12-25 11:41
@ 20 jawaban

Saya pikir Git di Dropbox bagus. Saya menggunakannya sepanjang waktu. Saya memiliki beberapa komputer (dua di rumah dan satu di tempat kerja) yang saya gunakan Dropbox sebagai pusat penyimpanan telanjang. Karena saya tidak ingin meng-host-nya di layanan publik, dan saya tidak punya akses ke server tempat saya selalu ssh, Dropbox akan mengurus ini dengan menyinkronkan (sangat cepat) di latar belakang.

Pengaturannya terlihat seperti ini:

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

Dari sana, Anda cukup mengkloning ~/Dropbox/git/project.git yang Anda tautkan ke akun Dropbox Anda (atau bagikan direktori ini dengan orang-orang), Anda dapat melakukan semua operasi Git yang biasa, dan mereka akan disinkronkan dengan semua mesin Anda secara otomatis.

Saya menulis posting blog versi kontrol , tautan lama sudah mati ) sesuai dengan alasan saya dan bagaimana saya mengatur lingkungan saya berdasarkan pengalaman saya dalam mengembangkan Ruby on Rails , tetapi itu dapat diterapkan untuk semuanya, sungguh.

1354
25 дек. Balas diberikan oleh Dan McNevin 25 Des 2009-12-25 20:10 '09 pada 20:10 2009-12-25 20:10

Cara yang benar untuk melakukan ini adalah dengan menggunakan git -remote-dropbox: https://github.com/anishathalye/git-remote-dropbox

Membuat repo kosong Anda sendiri di Dropbox menyebabkan banyak masalah. Anish (pencipta perpustakaan) menjelaskan yang terbaik :

Penyebab utama masalah ini adalah bahwa klien desktop Dropbox dirancang untuk menyinkronkan file, bukan repositori Git. Tanpa pemrosesan khusus untuk repositori Git, itu tidak mendukung jaminan Git yang sama. Operasi dalam repositori jarak jauh tidak lagi dilakukan operasi atom dan paralel atau tenggat waktu dengan sinkronisasi dapat menyebabkan kerusakan repositori.

Panel kontrol Git tradisional menjalankan kode sisi server untuk melakukan pekerjaan ini dengan benar, tetapi kami tidak bisa.

Keputusan Ini bisa diselesaikan dengan benar. Anda dapat menggunakan Git dengan Dropbox dan memiliki jaminan dan urutan keamanan yang sama dengan remote Git tradisional, bahkan jika ada beberapa pengguna dan operasi paralel!

Untuk pengguna, ini sesederhana menggunakan git-remote-dropbox, pembantu Git jarak jauh yang bertindak sebagai jembatan dua arah transparan antara Git dan Dropbox dan mempertahankan semua jaminan konsol Git tradisional. Bahkan aman untuk digunakan dengan folder bersama, sehingga dapat digunakan untuk kolaborasi (yay repo pribadi tak terbatas dengan kolaborator tak terbatas!).

Dengan Remote Assistance, Anda dapat menggunakan Dropbox sebagai Git jarak jauh dan terus menggunakan semua perintah Git yang biasa, seperti klon Git, gitpull dan push Git, dan semuanya akan berfungsi seperti yang diharapkan.

88
26 авг. jawabannya diberikan clu 26 agustus. 2015-08-26 02:25 '15 jam 2:25 2015-08-26 02:25

Jawaban ini didasarkan pada pengalaman Mercurial , bukan Git, tetapi pengalaman ini mengatakan bahwa menggunakan Dropbox dengan cara ini membutuhkan repositori yang korup, jika bahkan ada kemungkinan Anda akan memperbarui repositori berbasis Dropbox yang sama dari komputer yang berbeda pada waktu yang berbeda (Mac, Unix, Windows dalam kasus saya).

Saya tidak memiliki daftar lengkap hal-hal yang dapat salah, tetapi inilah contoh spesifik yang menggigit saya. Setiap mesin memiliki ide sendiri tentang karakter akhir baris dan bagaimana karakter huruf besar dan kecil ditangani dalam nama file. Dropbox dan Git / Mercurial menangani ini sedikit berbeda (saya tidak ingat perbedaan persisnya). Jika Dropbox memperbarui repositori di belakang Git / Mercurial back, presto, repositori yang rusak. Ini terjadi segera dan tanpa disadari, sehingga Anda bahkan tidak tahu bahwa repositori Anda rusak sampai Anda mencoba memulihkan sesuatu.

Setelah menggali dari satu kekacauan melakukan ini, jadi saya menggunakan resep berikut ini dengan sukses besar dan tanpa tanda-tanda masalah. Pindahkan repositori Anda dari Dropbox. Gunakan Dropbox untuk yang lainnya; dokumentasi, file jar , apa pun. Dan gunakan GitHub (Git) atau Bitbucket (Mercurial) untuk mengelola repositori itu sendiri. Keduanya gratis, jadi ini tidak menambah biaya, dan masing-masing instrumen sekarang memainkan kekuatannya.

Menjalankan Git / Mercurial di atas Dropbox tidak menambah risiko apa pun. Jangan lakukan ini.

85
01 мая '11 в 23:48 2011-05-01 23:48 jawabannya diberikan Bradjcox 01 Mei '11 pada 23:48 2011-05-01 23:48

Adapun perintah kecil menggunakan Dropbox:

Jika setiap pengembang memiliki repositori yang dapat diakses sendiri di Dropbox, yang hanya menarik bagi pengembang lain, ini membuatnya mudah untuk membagikan kode tanpa risiko korupsi!

Kemudian, jika Anda ingin memusatkan "arus utama", Anda dapat memaksa satu pengembang untuk mengelola semua klik dari repo Anda sendiri.

16
04 дек. jawaban diberikan teh_senaus 04 Des. 2012-12-04 15:27 '12 pada 3:27 PM 2012-12-04 15:27

Saya tidak ingin meletakkan semua proyek saya dalam satu repositori Git, dan saya tidak ingin masuk dan menjalankan kode ini untuk setiap proyek individu, jadi saya membuat skrip Bash yang mengotomatiskan proses. Anda dapat menggunakannya dalam satu atau beberapa direktori - sehingga ia dapat membuat kode dalam pesan ini untuk Anda atau dia dapat melakukannya pada beberapa proyek sekaligus.

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

skrip hanya memerlukan nama proyek. Ini akan membuat repositori git di ~/Dropbox/git/ bawah nama yang ditentukan dan mendorong semua isi direktori saat ini ke cabang asli yang baru dibuat. Jika lebih dari satu nama proyek ditentukan, argumen nama dari nama proyek paling kanan akan digunakan.

Secara opsional, argumen perintah -r menentukan cabang jarak jauh yang akan mengklik sumber utama. Lokasi sumber proyek utama juga dapat ditentukan dengan argumen -m. File .gitignore default juga ditempatkan di direktori cabang jarak jauh. Direktori default dan parameter .gitignore tercantum dalam skrip.

3
11 янв. jawabannya diberikan oleh ChisholmKyle 11 Jan 2014-01-11 02:53 '14 pada 2:53 2014-01-11 02:53

Sekarang, pada tahun 2014, saya menggunakan Git dan Dropbox selama sekitar satu setengah tahun tanpa masalah. Beberapa poin, meskipun:

  • Semua mesin saya menggunakan Dropbox ada di Windows, versi yang berbeda (dari 7 hingga 8) + 1 mac.
  • Saya tidak memberikan repositori kepada orang lain, jadi saya satu-satunya yang memodifikasinya.
  • git push mendorong ke repositori yang dihapus, jadi jika pernah rusak, saya dapat dengan mudah mengembalikannya.
  • Saya harus membuat alias di C:\Users menggunakan mklink /D link target , karena beberapa perpustakaan menunjuk ke lokasi absolut.
3
14 апр. Balas diberikan oleh Mikaël Mayer pada 14 April 2014-04-14 11:07 '14 pada 11:07 2014-04-14 11:07

Saya mengalami masalah yang sama dan membuat skrip kecil untuk itu. Idenya adalah untuk membuat Dropbox semudah mungkin dengan Git. Saat ini, saya dengan cepat memperkenalkan kode Ruby , dan saya akan menambahkan lebih banyak segera.

Skrip tersedia di https://github.com/nuttylabs/box-git .

2
20 сент. Jawabannya diberikan oleh Kiran Madipally 20 Sep. 2012-09-20 16:02 '12 pada pukul 4:02 sore 2012-09-20 16:02

Pendekatan lain:

Semua jawaban sejauh ini, termasuk jawaban @Dan , yang merupakan yang paling populer, berhubungan dengan gagasan menggunakan Dropbox untuk memusatkan repositori umum alih-alih menggunakan layanan berorientasi git, misalnya, github, bitback, dll.

Tetapi, karena pertanyaan awal tidak menunjukkan bahwa menggunakan "Git dan Dropbox bersama secara efektif" benar-benar berarti, mari kita bekerja pada pendekatan lain: "Menggunakan Dropbox hanya untuk menyinkronkan jalur kerja."

Panduan praktis memiliki >

  • di dalam direktori proyek, direktori .git kosong dibuat (misalnya, mkdir -p myproject/.git )

  • Jangan menyinkronkan direktori .git ke Dropbox. Jika Anda menggunakan Dropbox: buka "Preferensi", "Sinkronkan" dan "pilih folder yang akan disinkronkan", di mana direktori .git harus tidak ditandai. Ini akan menghapus direktori .git .

  • jalankan git init di direktori proyek

Ini juga berfungsi jika .git sudah ada, dan kemudian hanya >

>

Mengapa menggunakan pendekatan ini?

  • Dalam perubahan yang tidak berubah, cadangan Dropbox akan dibuat dan disinkronkan di antara perangkat.

  • Jika Dropbox memulai sesuatu saat menyinkronkan antar perangkat, git status git diff dan git diff akan lebih mudah dipahami.

  • Ini menghemat ruang di akun Dropbox Anda (keseluruhan cerita tidak akan disimpan di sana)

  • Dia menghindari masalah yang diangkat oleh @dubek dan @Ates di komentar ke jawaban @Dan, serta masalah yang terkait dengan @clu di jawaban lain .

Keberadaan remote di tempat lain (github, dll.) Akan menangani pendekatan ini dengan sempurna.

Bekerja di industri yang berbeda membawa beberapa masalah yang perlu diatasi:

  • Salah satu masalah potensial adalah Dropbox (yang tidak perlu?) Menyinkronkan banyak file saat memeriksa cabang yang berbeda.

  • Jika dua atau lebih perangkat sinkronisasi Dropbox memiliki cabang berbeda, Anda dapat kehi>

Salah satu cara untuk mengatasi masalah ini adalah dengan menggunakan git worktree untuk menyimpan cabang di direktori terpisah.

1
23 февр. jawabannya diberikan oleh IBrum pada 23 Februari. 2018-02-23 03:20 '18 pada 3:20 2018-02-23 03:20

Untuk 2 sen saya, Dropbox hanya menggunakan untuk penggunaan pribadi, di mana Anda tidak ingin khawatir tentang mendapatkan server repo pusat. Untuk pengembangan profesional apa pun, Anda cenderung membuat lebih banyak masalah daripada yang Anda putuskan, seperti yang telah disebutkan beberapa kali dalam arus, Dropbox tidak dimaksudkan untuk kasus penggunaan ini. Namun, metode yang sepenuhnya aman dari menjatuhkan repositori ke Dropbox tanpa plug-in atau alat pihak ketiga adalah dengan menggunakan paket. Saya memiliki alias berikut di .gitconfig untuk menyimpan input:

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

Contoh:

 # 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 
0
ответ дан Niklas Holm 07 апр. '18 в 10:49 2018-04-07 10:49