Učinkovito koristite Git i Dropbox zajedno?

Kako učinkovito koristiti Git i Dropbox ?

1065
25 дек. postavljen s n1kh1lp 25 dec. 2009-12-25 11:41 '09 u 11:41 2009-12-25 11:41
@ 20 odgovora

Mislim da je Git na Dropboxu super. Stalno ga koristim. Imam nekoliko računala (dva kod kuće i jedan na poslu) koje koristim kao Dropbox kao središnje spremište. Budući da je ne želim ugostiti u javnoj usluzi i nemam pristup poslužitelju na kojem uvijek mogu ssh, Dropbox će se pobrinuti za to sinkronizacijom (vrlo brzo) u pozadini.

Postavka izgleda ovako:

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

Odatle možete jednostavno klonirati ~/Dropbox/git/project.git koji ste povezali s vašim Dropbox računom (ili dijeliti ovaj direktorij s ljudima), možete izvesti sve uobičajene Git operacije i automatski će se sinkronizirati sa svim vašim strojevima.

Napisao sam blog za kontrolu verzija , stari link je mrtav ) u skladu s mojim razmišljanjem i kako sam postavio svoje okruženje na temelju mog iskustva u razvoju Ruby on Railsa , ali može se primijeniti na sve, stvarno.

1354
25 дек. Odgovor dao Dan McNevin 25. prosinca 2009-12-25 20:10 '09 u 20:10 2009-12-25 20:10

Ispravan način da to učinite je da koristite git -remote-dropbox: https://github.com/anishathalye/git-remote-dropbox

Stvaranje vlastitih golih reposa u Dropboxu uzrokuje mnoge probleme. Anish (kreator knjižnice) najbolje objašnjava :

border=0

Glavni uzrok tih problema je da je Dropbox desktop klijent dizajniran za sinkronizaciju datoteka, a ne Git repozitorija. Bez posebne obrade za Git repozitorije, on ne podržava iste Git garancije. Operacije u udaljenom spremištu više se ne izvode, atomske i paralelne operacije ili rokovi sa sinkronizacijom mogu oštetiti spremište.

Tradicionalna kontrolna ploča Git pokreće kod poslužitelja kako bi ispravno obavila ovaj posao, ali ne možemo.

Odluka. To se može ispravno riješiti. Možete koristiti Git s Dropboxom i imati iste sigurnosne garancije i sekvence kao i tradicionalni Git daljinski upravljač, čak i ako postoji nekoliko korisnika i paralelnih operacija!

Za korisnika je to jednostavno kao korištenje git-remote-dropboxa, udaljenog Git pomoćnika koji djeluje kao transparentni dvosmjerni most između Gita i Dropboxa i zadržava sva jamstva tradicionalne Git konzole. Čak je i siguran za korištenje s dijeljenim mapama, pa se može koristiti za suradnju (neograničeni privatni repo s neograničenim suradnicima!).

Pomoću daljinske pomoći možete koristiti Dropbox kao daljinski Git i nastaviti koristiti sve uobičajene Git naredbe, kao što su Git klon, gitpull i Git push, i sve će raditi kako se očekuje.

88
26 авг. odgovor je dan clu 26 aug. 2015-08-26 02:25 '15 u 2:25 2015-08-26 02:25

Taj se odgovor temelji na iskustvu Mercurial , a ne na Gitu, ali ovo iskustvo kaže da korištenje Dropboxa na ovaj način zahtijeva oštećena spremišta, ako postoji mogućnost da ćete ažurirati isto spremište temeljeno na Dropboxu s različitih računala u različito vrijeme (Mac, Unix, Windows u mom slučaju).

Nemam potpuni popis stvari koje mogu poći po zlu, ali evo specifičnog primjera koji me je ujeo. Svaki stroj ima vlastitu ideju o znakovima koji završavaju redak i kako se velika i mala slova obrađuju u nazivima datoteka. Dropbox i Git / Mercurial ovo rješavaju malo drugačije (ne sjećam se točnih razlika). Ako Dropbox ažurira spremište iza Git / Mercurial, presto, slomljeno spremište. To se događa odmah i nezapaženo, pa čak ni ne znate da je vaše spremište oštećeno dok ne pokušate nešto oporaviti.

Nakon što sam to iskopao iz jednog nereda, koristio sam sljedeći recept s velikim uspjehom i bez znakova problema. Samo premjestite spremište iz Dropboxa. Koristite Dropbox za sve ostalo; dokumentaciju, jar datoteke , što god. I koristite GitHub (Git) ili Bitbucket (Mercurial) za upravljanje samim spremištem.Oba su slobodna, tako da to ništa ne dodaje trošku, a svaki instrument sada igra na svojim prednostima.

Pokretanje Git / Mercurial na vrhu Dropboxa ne donosi ništa osim rizika. Nemojte to raditi.

85
01 мая '11 в 23:48 2011-05-01 23:48 odgovor je dat Bradjcox 01 svibanj '11 u 23:48 2011-05-01 23:48

Što se tiče malih naredbi pomoću Dropboxa:

Ako svaki programer ima svoj spremni pristupačan repozitorij u Dropboxu, koji koristi samo za druge programere, to olakšava dijeljenje koda bez rizika od korupcije!

Zatim, ako želite centralizirati "mainline", možete prisiliti jednog razvojnog programera da upravlja svim klikovima na njega iz vlastitog repoa.

16
04 дек. odgovor dan teh_senaus 04. prosinca 2012-12-04 15:27 '12 u 15:27 2012-12-04 15:27

Nisam htjela staviti sve svoje projekte u jedan Git repozitorij, a nisam se htjela prijaviti i pokrenuti ovaj kôd za svaki pojedinačni projekt, pa sam napravio Bash skriptu koja automatizira proces. Možete ga koristiti u jednom ili više direktorija - tako da on može napraviti kod u ovoj poruci za vas ili to može učiniti na nekoliko projekata odjednom.

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

skripta zahtijeva samo ime projekta. Stvorit će git repozitorij u ~/Dropbox/git/ pod navedenim imenom i gurnuti sav sadržaj trenutnog direktorija u novo stvorenu granu izvornika. Ako je navedeno više od jednog imena projekta, koristit će se argument imena desnog desnog projekta.

Opcionalno, argument argument -r navodi udaljenu granu koja će kliknuti na glavni izvor. Lokacija glavnog projekta također se može odrediti s argumentom -m. Zadana .gitignore datoteka također se nalazi u direktoriju udaljene grane. Standardni direktorij i .gitignore parametri navedeni su u skripti.

3
11 янв. odgovor je dao ChisholmKyle 11. siječnja 2014-01-11 02:53 '14 u 2:53 2014-01-11 02:53

Sada, u 2014., koristio sam Git i Dropbox oko godinu i pol bez problema. Ipak, neke točke:

  • Svi moji strojevi koji koriste Dropbox su u Windowsima, različite verzije (od 7 do 8) + 1 mac.
  • Ne predajem spremište nekom drugom, pa sam ja jedini koji ga je modificirao.
  • git push gura do obrisanog repozitorija, pa ako je ikada oštećen, lako ga mogu vratiti.
  • Morao sam stvoriti pseudonime u C:\Users koriste mklink /D link target , jer su neke knjižnice ukazivale na apsolutne lokacije.
3
14 апр. Odgovor dao Mikaël Mayer 14. travnja 2014-04-14 11:07 '14 u 11:07 2014-04-14 11:07

Naletio sam na sličan problem i stvorio mali skript za njega. Ideja je da se Dropbox učini što je moguće lakšim uz Git. Trenutno sam brzo uveo Ruby kod, i uskoro ću dodati još.

Skripta je dostupna na https://github.com/nuttylabs/box-git .

2
20 сент. Odgovor daje Kiran Madipally 20. rujna. 2012-09-20 16:02 '12 u 16:02 2012-09-20 16:02

Drugi pristup:

Svi odgovori do sada, uključujući i @Dan odgovor , koji je najpopularniji, odnose se na ideju korištenja Dropboxa za centraliziranje zajedničkog spremišta umjesto korištenja git-orijentirane usluge, na primjer, github, bitback itd.

No, budući da izvorno pitanje ne znači da korištenje "Git i Dropbox zajedno učinkovito" stvarno znači, hajdemo raditi na drugačiji pristup: "Korištenje Dropbox za sinkronizaciju samo radne linije."

Praktični vodič sadrži sljedeće korake:

  • unutar direktorija projekta .git prazan .git direktorij (na primjer, mkdir -p myproject/.git )

  • Nemojte sinkronizirati imenik .git s .git . Ako koristite Dropbox: idite na "Postavke", "Sinkronizacija" i "Odabir mapa za sinkronizaciju", gdje bi trebao biti .git direktorij. Ovo će ukloniti .git direktorij.

  • pokrenite git init u direktoriju projekta

Također radi i ako .git već postoji, a zatim radi samo 2. korak. Dropbox će spremiti kopiju git datoteka na web-mjestu.

Korak 2 će natjerati Dropbox da ne sinkronizira strukturu git sustava, što je željeni rezultat za ovaj pristup.

Zašto koristiti ovaj pristup?

  • U nepromijenjenim promjenama stvorit će se sigurnosna kopija Dropboxa i bit će sinkronizirana između uređaja.

  • Ako Dropbox pokrene nešto pri sinkronizaciji između uređaja, git status i git diff bit će prikladnije za razumijevanje.

  • Time se štedi prostor na vašem računu spremnika (cijela priča neće biti pohranjena tamo)

  • On izbjegava probleme koje je postavio @dubek i @Ates u komentarima na @Dan odgovor, kao i probleme vezane uz @clu u drugom odgovoru .

Postojanje udaljenog negdje drugdje (github, itd.) Savršeno će obraditi ovaj pristup.

Rad u različitim industrijama donosi neke probleme o kojima treba voditi računa:

  • Jedan potencijalni problem je što Dropbox (nepotrebno?) Sinkronizira potencijalno mnogo datoteka prilikom provjere različitih grana.

  • Ako dva ili više Dropbox sinkronizacijskih uređaja imaju različite grane, možete izgubiti nedodijeljene promjene na oba uređaja,

Jedan od načina za rješavanje tih problema je korištenje git worktree za spremanje grana u zasebnim direktorijima.

1
23 февр. odgovor je dao IBrum 23. veljače. 2018-02-23 03:20 '18 u 3:20 2018-02-23 03:20

Za moje 2 centa Dropbox koristi samo za osobnu upotrebu, gdje ne želite brinuti o dobivanju središnjeg repo poslužitelja. Za bilo koji profesionalni razvoj, vi ste vjerojatno da će stvoriti više problema nego što se odlučite, kao što je već spomenuto nekoliko puta u stream, Dropbox nije namijenjen za ovaj slučaj uporabe. Međutim, potpuno sigurna metoda ispuštanja spremišta u Dropbox bez dodataka ili alata treće strane je korištenje paketa. Imam sljedeće pseudonime u .gitconfig za spremanje unosa:

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

primjer:

 # 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