Efektyviai naudokite „Git“ ir „Dropbox“?

Kaip efektyviai naudoti „ Git“ ir „ Dropbox“ ?

1065
n1kh1lp 25 dec. 2009-12-25 11:41 '09 11:41 2009-12-25 11:41
@ 20 atsakymų

Manau, kad „Git on Dropbox“ yra puikus. Aš jį visą laiką naudoju. Turiu keletą kompiuterių (du namuose ir vienas darbe), kuriuos naudoju kaip „Dropbox“ kaip centrinę talpyklą. Kadangi nenoriu, kad galėčiau jį priimti viešojoje tarnyboje, ir neturiu prieigos prie serverio, kuriame visada galiu ssh, „Dropbox“ tai pasirūpins sinchronizuodamas (labai greitai) fone.

Nustatymas atrodo taip:

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

Iš ten jūs galite tiesiog klonuoti ~/Dropbox/git/project.git , kurį susieti su „Dropbox“ paskyra (arba bendrinti šį katalogą su žmonėmis), galite atlikti visas įprastas „Git“ operacijas ir jos bus automatiškai sinchronizuojamos su visomis jūsų mašinomis.

Aš parašiau versijos kontrolės dienoraščio įrašą, senas ryšys miręs ) pagal mano samprotavimus ir kaip aš sukūriau savo aplinką, remiantis mano patirtimi kuriant „ Ruby on Rails“ , bet jis gali būti taikomas visai, tikrai.

1354
25 дек. Atsakymas, kurį pateikė Dan McNevin, gruodžio 25 d 2009-12-25 20:10 '09, 20:10, 2009-12-25 20:10

Tinkamas būdas tai padaryti yra naudoti git -roteote-dropbox: https://github.com/anishathalye/git-remote-dropbox

Sukurkite savo pliką repo „Dropbox“ sukelia daug problemų. Anish (bibliotekos kūrėjas) tai geriausiai paaiškina :

border=0

Pagrindinė šių problemų priežastis yra ta, kad „Dropbox“ darbastalio klientas yra skirtas sinchronizuoti failus, o ne „Git“ saugyklas. Be specialaus apdorojimo „Git“ saugykloms, ji nepalaiko tų pačių „Git“ garantijų. Operacijos nuotolinėje saugykloje nebėra atliekamos atominės ir lygiagrečios operacijos arba terminai su sinchronizacija gali sukelti kapinyno pažeidimus.

Tradicinis „Git“ valdymo pultas atlieka serverio pusės kodą, kad tai veiktų teisingai, bet negalime.

Sprendimas. Tai galima tinkamai išspręsti. Galite naudoti „Git“ su „Dropbox“ ir turėti tas pačias saugumo garantijas ir sekas, kaip ir tradicinis „Git“ nuotolinis ryšys, net jei yra keli naudotojai ir lygiagrečios operacijos!

Naudotojui tai yra taip paprasta, kaip naudojant „git-remote-dropbox“, nuotolinį „Git“ pagalbininką, kuris veikia kaip skaidrus dvikryptis tiltas tarp „Git“ ir „Dropbox“ ir išsaugo visas tradicinės „Git“ konsolės garantijas. Jis yra netgi saugus naudoti su bendrai naudojamais aplankais, todėl jis gali būti naudojamas bendradarbiavimui (yay neribotas privatus atpirkimas su neribotais bendradarbiais!).

Su nuotoline pagalba galite naudoti „Dropbox“ kaip nuotolinį „Git“ ir toliau naudoti visas įprastas „Git“ komandas, pvz., „Git“ kloną, „gitpull“ ir „Git“ stumti, ir viskas veiks taip, kaip tikėtasi.

88
26 авг. atsakymas pateikiamas 26 d. 2015-08-26 02:25 '15 at 2:25 am 2015-08-26 02:25

Šis atsakymas grindžiamas „ Mercurial“ patirtimi, o ne „Git“, tačiau ši patirtis rodo, kad naudojant „Dropbox“ tokiu būdu reikia sugadintų saugyklų, jei yra net tikimybė, kad tą patį „Dropbox“ saugyklą atnaujinsite iš skirtingų kompiuterių skirtingais laikais („Mac“, „Unix“, „Windows“ mano atveju).

Neturiu išsamų dalykų, kurie gali būti neteisingi, sąrašą, tačiau čia yra konkretus pavyzdys, kuris man trukdo. Kiekviena mašina turi savo idėją apie linijų pabaigos simbolius ir kaip tvarkomi didžiųjų ir mažųjų raidžių simboliai. „Dropbox“ ir „Git / Mercurial“ tai šiek tiek skirtingai tvarko (aš nepamenu tikslių skirtumų). Jei „Dropbox“ atnaujina saugyklą už „Git / Mercurial“ atgal, presto, skaldytų saugyklų. Tai atsitinka iš karto ir nepastebimai, todėl net nežinote, kad jūsų kapinynas yra sugadintas, kol nebandysite kažką atkurti.

Po to, kai iškasite iš vieno netvarka, aš naudoju šį receptą labai sėkmingai ir be problemų požymių. Tiesiog perkelkite savo saugyklą iš „Dropbox“. Naudokite „Dropbox“ visam kitam; dokumentai, jar failai , nesvarbu. Ir naudokite „ GitHub“ („Git“) arba „ Bitbucket“ („Mercurial“), kad valdytumėte pačią saugyklą, abu yra nemokami, todėl tai nieko nedaro, o kiekvienas instrumentas dabar turi savo privalumus.

„Git“ / „Mercurial“ važiavimas „Dropbox“ viršuje prideda tik riziką. Nedarykite to.

85
01 мая '11 в 23:48 2011-05-01 23:48 atsakymas duotas Bradjcox 01 Gegužės 11 d. 23:48 2011-05-01 23:48

Kaip ir mažoms komandoms naudojant „Dropbox“:

Jei kiekvienas kūrėjas turi savo prieinamą rašytinę saugyklą „Dropbox“, kuris remiasi tik kitais kūrėjais, tai leidžia lengvai dalytis kodu be korupcijos rizikos!

Tada, jei norite centralizuoti „pagrindinę liniją“, galite priversti vieną kūrėją valdyti visus paspaudimus iš savo repo.

16
04 дек. atsakymas teh_senaus gruodžio 4 d. 2012-12-04 15:27 '12, 15:27 PM 2012-12-04 15:27

Nenorėjau visus savo projektus įdėti į vieną „Git“ saugyklą ir nenorėjau prisijungti ir paleisti šį kodą kiekvienam atskiram projektui, todėl sukūriau „ Bash“ scenarijų, kuris automatizuoja procesą. Jį galite naudoti viename ar keliuose kataloguose, kad jis galėtų užmegzti kodą šiame pranešime arba jis gali tai padaryti kelis projektus vienu metu.

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

scenarijus reikalauja tik projekto pavadinimo. Ji sukurs git repozitoriją ~/Dropbox/git/ po nurodytu pavadinimu ir stumti visą dabartinio katalogo turinį į naujai sukurtą originalo filialą. Jei nurodytas daugiau nei vienas projekto pavadinimas, bus naudojamas dešiniojo projekto vardo pavadinimas.

Pasirinktinai -r komandų argumentas nurodo nuotolinį filialą, kuris spustelės pagrindinį šaltinį. Pagrindinio projekto šaltinio vietą taip pat galima nurodyti argumentu -m. Numatytasis .gitignore failas taip pat yra patalpintas nuotolinio filialo kataloge. Numatytasis katalogas ir .gitignore parametrai yra išvardyti scenarijuje.

3
11 янв. atsakymą pateikė ChisholmKyle 11 sausis 2014-01-11 02:53 '14 ne 2:53 2014-01-11 02:53

Dabar, 2014 m., Aš, be jokių problemų, naudoju Git ir Dropbox apie pusantrų metų. Tačiau kai kurie taškai:

  • Visi mano įrenginiai naudojant „Dropbox“ yra „Windows“, skirtingos versijos (nuo 7 iki 8) + 1 mac.
  • Aš ne perduoti saugyklą kitam, todėl aš esu vienintelis, kuris jį pakeitė.
  • git push stumia į ištrintą saugyklą, todėl, jei ji kada nors sugadinta, galiu ją lengvai atkurti.
  • Turėjau sukurti slapyvardžius C:\Users naudodami mklink /D link target , nes kai kurios bibliotekos nurodė absoliučias vietas.
3
14 апр. Mikaël Mayer atsakymas, pateiktas balandžio 14 d 2014-04-14 11:07 '14 at 11:07 2014-04-14 11:07

Aš susidūriau su panašia problema ir sukuriau mažą scenarijų. Idėja yra, kad „Dropbox“ būtų kuo lengviau su „Git“. Šiuo metu aš greitai pristatiau Ruby kodą, ir aš netrukus pridėsiu.

Scenarijus pasiekiamas adresu https://github.com/nuttylabs/box-git .

2
20 сент. Atsakymą pateikė Kiran Madipally . 2012-09-20 16:02 '12 4:02 pm 2012-09-20 16:02

Kitas metodas:

Visi iki šiol pateikti atsakymai, įskaitant populiariausią @Dan atsakymą , yra susiję su idėja naudoti „Dropbox“, kad centralizuotų bendrą saugyklą, o ne naudojant „git“ orientuotą paslaugą, pavyzdžiui, „github“, „bitback“ ir kt.

Tačiau, kadangi pradiniame klausime nenurodyta, kad „Git ir Dropbox kartu efektyviai naudojant“ iš tikrųjų reiškia, atlikite kitą požiūrį: „Naudojant„ Dropbox “sinchronizuoti tik darbo liniją.

Praktiniame vadove yra šie veiksmai:

  • projekto kataloge yra sukurtas tuščias .git katalogas (pvz., mkdir -p myproject/.git )

  • Nesinchronizuokite .git katalogo į „Dropbox“. Jei naudojate „Dropbox“: eikite į „Nuostatos“, „Sinchronizavimas“ ir „pasirinkti aplankus, kuriuos norite sinchronizuoti“, kur .git katalogas turėtų būti nepažymėtas. Tai pašalins .git katalogą.

  • paleiskite git init projekto kataloge

Jis taip pat veikia, jei .git jau egzistuoja, ir tada jis atlieka tik 2 žingsnį. Dropbox išsaugos git failų kopiją svetainėje.

2 žingsnis verčia Dropbox nesinchronizuoti git sistemos struktūros, kuri yra norimas šio metodo rezultatas.

Kodėl naudoti šį metodą?

  • Pakeitus pakeitimus, bus sukurta „Dropbox“ atsarginė kopija ir jie bus sinchronizuojami tarp įrenginių.

  • Jei „Dropbox“ pradeda kažką, kai sinchronizuojama tarp įrenginių, git status ir git diff bus lengviau suprasti.

  • Tai taupo vietą „Dropbox“ paskyroje (visa istorija nebus ten saugoma)

  • Jis vengia @dubek ir @Ates komentarų komentarų @Dan atsakymo, taip pat problemų, susijusių su @clu kitame atsakyme .

Nuotolinis buvimas kitur (github ir tt) puikiai elgsis su šiuo požiūriu.

Darbas skirtingose ​​pramonės šakose sukelia tam tikrų problemų, kurias reikia rūpintis:

  • Viena iš galimų problemų yra ta, kad „Dropbox“ (be reikalo?) Sinchronizuoja potencialiai daug failų, kai tikrinate skirtingus filialus.

  • Jei du ar daugiau „Dropbox“ sinchronizavimo įrenginių turi skirtingus filialus, galite prarasti neprivalomus pakeitimus abiejuose įrenginiuose,

Vienas iš būdų išspręsti šias problemas yra naudoti git worktree kad išsaugotumėte filialus atskiruose kataloguose.

1
23 февр. atsakymą pateikė IBrum , vasario 23 d. 2018-02-23 03:20 '18, 3:20 2018-02-23 03:20

Mano 2 centų „Dropbox“ naudoja tik asmeniniam naudojimui, kur nenorite nerimauti dėl centrinio repo serverio. Dėl bet kokio profesinio tobulėjimo jūs greičiausiai sukursite daugiau problemų nei nuspręsite, kaip jau keletą kartų minėjote sraute, „Dropbox“ nėra skirtas šiam naudojimo atvejui. Tačiau visiškai saugus metodas, leidžiantis atmesti saugyklas į „Dropbox“ be jokių trečiųjų šalių papildinių ar įrankių, yra paketų naudojimas. Turiu šiuos slapyvardžius .gitconfig kad išsaugotumėte įvestį:

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

Pavyzdys:

 # 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