Press "Enter" to skip to content

GOTO 2015 • Deep Dive into Git • Edward Thomson


di nuovo mi chiamo Cedric Thompson e
oggi ti porterò attraverso un
immersione profonda e per ottenere naturalmente essere
il controllo della versione get molto popolare
sistema quante persone stanno usando git
proprio ora al loro giorno di lavoro in un
progetto open-source va bene facciamo che
più facile quante persone non lo stanno usando
ancora bene quindi cercherò di mantenere questo
ad un livello dove se non hai mai usato
vai prima che tu possa ancora saltare dentro
ma non ho intenzione di non farlo
sai come iniziare con git
sessione Non ho intenzione di dirvi come
clonare un repository non lo farò
in realtà andando a rompere aprire a
repository e guardare cosa c’è dentro mi
pensa che se usi git, otterrai un
molto valore fuori da questo penso che se
allora non parliamo di
interni di un sistema di controllo della versione così
ci sono molte tracce fantastiche qui a
la conferenza quindi se questo è davvero
noioso sentirsi liberi di alzarsi e andarsene
non farti annoiare a questo
conferenza è una grande conferenza reale
rapidamente su di me come Lars ha detto che sono
un ingegnere del software presso Microsoft che su
la terra avrebbe pensato quando ho iniziato
a Microsoft un paio di anni fa che io
starebbe parlando di come
Claire ha detto che è stato un modo interessante
per arrivare qui spero di vederti più tardi
settimana e ti dirò tutto su di esso a
codice lavoro sullo studio visivo di
Visual Studio online del git
integrazione in ciò e lo faccio io
tipo di lavoro a livello di basso livello
bit all’interno del repository su cui lavoro
progetto chiamato Lib get 2 che è un
reimplementazione di entrare in C e poi
perché ci siamo reimplementati di cose come
Malik Malik Malik uscita se vuoi
mettilo in Visual Studio
Malik Malik Malik non esce e tutti
un improvviso Visual Studio sta riprendendo tutto
la tua RAM e arresto anomalo in modo che lib get to is
fatto di non farlo per essere una bella biblioteca
che puoi chiamare da qualsiasi applicazione
e poi ci sono i front-end per questo
lingue diverse come questa
come Ruby Java, quindi prendi un bel idiomatico
modo in modo che se si se si vuole piacere
modo pigro per chiamare puoi usare
pacchetti e che i colloqui per arrivare a Lib
siamo davvero felici di Liggett – I’ve
ho degli adesivi se vuoi entrare
l’applicazione venire ottenere un po ‘get
all’adesivo ho alcune parole e
Ho parlato di scrivere di ottenere e
Mi sto espandendo in alcuni video
formazione su get se stai usando get
in studio visivo questo è più questo è
più approccio ai principianti forse e forse
non come dadi e bulloni come quello che sei
per vedere ma se la tua squadra è
pensando di salire su get e
i tuoi utenti di Visual Studio lo controllo
prendi comunicazione visiva per lo studio che puoi firmare
fino a essere avvisato quando è finito ma
come ho detto che non stiamo parlando di come
per usare entrare nello studio visivo, lo faremo
parla di come git funziona davvero sotto
le coperte perché dovremmo preoccuparsi che
sai che ho fatto il controllo della versione
per lungo tempo nessuno ha mai voluto
parlami dei meriti relativi di
Berkeley DB all’interno di sovversione o come
Il layout della tabella TFS funziona ma tutti
vuole sapere come funziona perché è così
bene, quindi se si riavvolge un po ‘
così come è stato creato git è stato creato
circa dieci anni fa da un ragazzo di nome Linus
Torvalds se quel nome suona familiare
è perché ha scritto il kernel di Linux
e lo scrisse per aiutarlo a scrivere il
Kernel Linux era stanco della versione
sistemi di controllo che stava usando
e se torni a una sorta di obiettivi
quella linea è impostata quando ha iniziato
creando ancora voleva essere veloce lui
volevo che fosse distribuito, lo voleva
avere una sorta di parvenza di
stabilità di fronte o almeno lui
Saprebbe se c’era la corruzione
quello che non c’è in questa lista è farlo
facile da usare e in effetti lui uno dei suoi
altri punti sono stati presi in considerazione
decisione presa dal progetto CVS e
fai il contrario e questo è ciò che sai
c’è c’è dell’umorismo in
ma lui era davvero serio quando lui
ha fatto questo e per tutte le sue debolezze
una cosa che il team CBS ha fatto è stato questo
hanno davvero a cuore un interno
coerente e almeno comprensibile
sistema che stavano costruendo scarica su
l’ altra mano ha qualcosa di strano
comandi questi ultimi quattro sono i miei preferiti
check out fa quattro cose diverse
a seconda del tipo di argomenti che hai
nutritelo e se vi sbagliate bene
può darti qualche errore strano
messaggi e se vuoi provare ad evitare
questo e leggere le pagine man leggere il
la documentazione non è necessariamente
utile II lavoro per ottenere come II affare
con i bit nel repository get su a
base giornaliera non so quale sia il primo
uno significa se mi hai detto che un comando
Stavo andando avanti con il porto locale a
il capo aggiornato a monte guarderei
a te come se fossi diventato un altro capo
questo non ha senso per me e lo so
esattamente quello che fa quel comando
il comando di rebase a proposito, quindi penso
l’onestà con te è importante che io no
voglio alzarti qui e mentire anche a te
molto ma ti mentirò due volte in
questa presentazione e questa è una di
loro uno di questi messaggi non è reale
non è una cosa reale da ottenere
la documentazione è la documentazione
così male che qualcuno ha effettivamente preso
tutta la documentazione lo ha impostato in a
Markov catena e mettere su un sito web che
in forma rende falso ottenere pagine man e sono
quasi quasi non puoi dirlo
sono falsi se non l’hai visto andare
controllalo se sei curioso che sia il
è il rivelare tutti i commit a valle
sotto i percorsi upstream inviati che è il
falso uno sono morto
sì è un po ‘difficile da raccontare l’ultima
quelli particolarmente onerosi perché aggiornati
remoti e associati
oggetti che dovrebbe essere appena stato caricato
le tue modifiche sono corrette così adoro ottenere ottiene
come un grande strumento ma può essere difficile
Usare fondamentalmente quando Linus ha costruito git
e quando Junio ​​Junio ​​ha mono è il
attuale manutentore di diventare molto bravo ragazzo
Junio ​​e linus sono entrambi intelligenti
più intelligente di me, che è uno dei più
problemi che ho quando uso git perché
i comandi git sono in realtà solo una perdita
astrazione in cima al modello di dati così
capire come funziona il modello di dati
può essere davvero importante per usare git
okay, quindi come funziona?
eseguire il backup al git fin dall’inizio è un
sistema di controllo della versione distribuito che
era uno degli obiettivi di Linus cosa fa
significa essere un controllo di versione distribuito
sistema di controllo della versione distribuita
i sistemi divennero popolari allo scoperto
mondo sorgente perché sai se me ne vado
nel mio lavoro di giorno sono seduto in un ufficio
accanto a tutti i miei colleghi di lavoro
parlando con un server centrale verso il basso
sala che è buona perché dentro
controllo della versione centralizzata necessario
essere offline mi dispiace devi essere online
connesso alla rete disponibile
parlando al server per fare tutto
se vuoi guardare la storia, chiedi
il sì il server per la cronologia il
server lo invia e tu sei l’interfaccia utente
cliente lo si disegna sullo schermo
per l’utente è stato molto più facile
scrivere nuovamente i client di controllo della versione
quei giorni con una versione distribuita
sistema di controllo tutto è locale
anche se il mio commette tutta la mia storia
tutto è locale se voglio se io
voglio guardare la storia che ho appena aperto
il repository sul mio disco fisso se io
voglio controllare un altro ramo tutto
quei rami tutti i file in tutto
la storia è sul mio disco fisso locale che posso
commetti anche localmente quale è
una specie di affascinante che permette
io a lavorare indipendentemente da uno dei miei
colleghi di lavoro perché posso impegnarmi a livello locale
in realtà mi permette di farlo
indipendentemente dai miei colleghi, così ottengo
un bel modello parallelo per lo sviluppo quindi
se sto lavorando e il mio collega Alice è
lavorando possiamo entrambi apportare modifiche a
i nostri repository locali e poi ci sincronizziamo
quelli più avanti lungo la strada ogni volta che noi
vogliono ogni volta che sei connesso a
rete possiamo inviare quei cambiamenti e noi
possiamo unire le nostre modifiche insieme
in realtà è davvero molto potente
parte del git è questo questo tipo di modello
ed è il repository git quello attuale
formati di file che consentono davvero questo
funziona quindi cosa fa il repository git
assomiglia a come lo abilita questo
flusso di lavoro parallelo questo è questo
flusso di lavoro distribuito indipendente
quindi questo è solo un esempio, diciamo
Mi sono alzato in alto questo è il mio
repository Ho controllato qualcosa
dal server e ne ha tre
si impegna così ho commit 1 2 3
sul mio server Alice ha fatto lo stesso
cosa sul suo disco fisso che ha
commit 1 commit per commettere 3 ok ora se
entrambi vogliamo iniziare a fare cambiamenti I
può fare un cambiamento e affidarlo al mio
repository locale è costruito sopra
quegli ultimi analisti fanno lo stesso
cosa allo stesso tempo quando voglio
I cambiamenti di Alice voglio portarli
nel mio repository quindi li preleverò
dal server dove li ha messi e
Li porterò nel mio repository
a differenza di un controllo di versione centralizzato
sistema dove a questo punto il server
capirei i nostri cambiamenti e fonderemmo
li insieme per noi e poi ci danno
indietro una sorta di fusione del
due che è capito che non funziona
quel diritto scarico il commit di Alice e
è costruito sopra il commit di tre ancora
non è che non ha niente a che fare con il mio
commetti che non sono in alcun modo
intrecciati fino a quando non esplicitamente
unirli e ottengo un commit che è il
questa è la combinazione di quei due
cambiamenti e questo è il tipo di chiave per come
la storia è modellata e vediamo se
Posso capire come fare questo
eccellente quindi qui ho capito
repository che ti ho mostrato
e userò se guardo
il registro git sembra proprio questo
cosa vedi se esegui semplicemente il log git
comando che è come si guarda alla storia
questo è ciò che vedi su Github questo è
ciò che vedi su Visual Studio online
questo è ciò che vedi su questi siti
ed è solo una lista piatta di commit e
in realtà non chiarisce questo tipo di
una specie di flusso che ti stavo dimostrando
se invece usi questo comando git log
– – graph – – one-line che puoi effettivamente
guarda come la storia si distacca e
Faccio il mio cambio Alice le fa cambiare
sono entrambi a cui puntano entrambi
commit originale
da quello da cui entrambi hanno iniziato
e poi tornano insieme in quello
quel commit unito che include entrambi
le nostre modifiche okay puoi usare altri strumenti
sai che c’è K che prende X
che si è aperto qui dietro e
scusami non ho capito che avevo audio e
ti mostreranno anche questo grafico così è
è davvero solo tu conosci i siti web
e il catalogo predefinito che tenta di
mostra questo questo elenco lineare di
la storia che è utile mi piace
guardando il grafico così perché penso
illustra davvero ciò che ottiene è
effettivamente facendo ok andiamo
quindi fai in modo che tu sappia che abbiamo
visto questo grafico abbiamo parlato di questo
il grafico in realtà memorizza i suoi dati in
questo grafico è chiamato un diretto
grafico aciclico ho fallito la teoria dei grafi così
Cercherò di spiegarti cosa
ciò significa che è diretto un non orientato
i nodi grafici sono semplicemente collegati a ciascuno
altro
in un grafo orientato un nodo in realtà
punta al prossimo e quindi è così
in realtà ha una direzione nel suo grafico e
è ciclico se avesse un ciclo un nodo
potrebbe essere indicando te stesso
sai che hai un ciclo da uno a
due o tre indietro a uno che non puoi fare
che così questi stanno davvero costruendo
l’un l’altro indicando i loro genitori
commit to builds su commit one commit
tre build su commit per te non possono avere
impegnare un edificio sul futuro
il che ha senso che tu sappia il tempo che abbiamo
per lo meno percepirlo come lineare, quindi questo
con la nostra comprensione del tempo
questa è la seconda linea che penso sia
l’ultima riga che sto per dirti spero
così
in caso affermativo il resto sono non intenzionale che abbiamo
parlato di questi ID di commit come essere
uno due tre e quando ho fatto un
cambio mi sono impegnato per quando Alice ha fatto
un cambiamento ha ottenuto il numero cinque come abbiamo fatto noi
sai chi è diventato straniero che ha ottenuto cinque buoni risultati
si sa in un server centralizzato che
vuoi solo sapere determinare
chi ottiene il prossimo commit ID e in guid
non è così facile perché non c’è
server centrale in modo da non poterne semplicemente fare uno
due tre quattro cinque abbiamo bisogno di una migliore
strategia e avremmo potuto usare un caso
numero che potremmo usare un buongiorno
ciò che viene effettivamente fatto è davvero intelligente
in realtà richiede un hash sha-1 del
contenuto del commit e questo diventa
il commit ID SHA-1 è un cento e
hash da 60 bit, quindi 20 byte
quando lo trasformi in esadecimale
stringa in modo che sia bello e facile da
lavorare con in modo da non parlare
binario ha in realtà 40 caratteri
ottengono 40 caratteri esadecimali
un po ‘pesantemente invece di solito
parla solo dei primi sette
personaggi di cui parliamo quanto basta
identifica in modo univoco ciò che si impegna nel nostro
la storia e questo è un po ‘meglio
ancora parlando di un cinque zero un VCF
che non è il tipo di un boccone
ma non è tanto peggio il mio TFS
il server ha un milione di set di modifiche su di esso
quindi non è molto peggio di un sette
cifra numero davvero cosa intendo quando
Dico che abbiamo cancellato il contenuto del
commettere ciò significa che un commit è un
istantanea dell’intero repository se
hai lavorato con te molte volte se
fai girare Git Show sui tuoi impegni
oppure se lo carichi su github vedi a
diff quindi è molto facile pensare a git
come memorizzare patch da una revisione a
un altro che non è in realtà come git
memorizza i suoi dati ottiene memorizza un commit a
istantanea dell’intero repository a
ogni punto nel tempo e soprattutto se
hai ogni file in ogni commit
sembra che diventi molto costoso
molto velocemente no e ecco come
ecco come si gira questa spesa
quando get costruisce un commit si costruisce questo
lo snapshot punta a ciò che chiama albero
oggetti e oggetti blob gli alberi sono file
blob Mi dispiace che gli alberi siano directory
i BLOB sono file se ho appena il mio primo
commettere
il mio primo impegno nella storia che sto aggiungendo
un file file1 punto txt Ho un commit
e punta a un albero che è la mia radice
directory per il mio repository al suo interno
directory Ho solo un file blob one
chiamato file un punto txt e lo farai
la spia della spia commuta ha ID l’altra
oggetti blob e gli alberi hanno anche gli ID in modo
quando costruiamo questo quando costruiamo il nostro
repository quando costruiamo il nostro primo
impegno stiamo aggiungendo il file 1 punto txt noi
prendi il file 1 punto txt e lo abbiamo cancellato con
sha-1 stesso stesso meccanismo che usiamo
per i commit e otteniamo il suo ID e quello
diventa il suo ID blob e quindi costruiamo a
albero che punta a quel blob per il suo ID
nel suo nome di file e abbiamo hash quello
diventa l’ID dell’albero e poi lo mettiamo
in un commit e lo abbiamo hash e quello
diventa il nostro impegno ID quando aggiungiamo
un altro file quindi stiamo scattando delle istantanee
quando aggiungiamo un altro file, il nostro prossimo commit
diciamo che aggiungiamo il file al testo e commettiamo
esso hash file in testo e creare a
blob da quel file 1 non è cambiato
il suo ID blob rimane lo stesso, quindi non lo facciamo
avere un nuovo oggetto per il testo del punto 1 del file così
alla fine stiamo solo memorizzando il
cambia anche se otteniamo un’istantanea di
la piena albero quando abbiamo effettivamente osserviamo
il commit quando guardiamo l’albero e
ovviamente il nostro ID albero è cambiato perché
ora elenca un secondo file da
prima di andiamo a dare un’occhiata
a questo guardiamo solo questo secondo
commit che è 6 9 a 4 6 F vederlo è un
poco ingombrante per parlare di loro
perdonami, andiamo così se noi, se noi
guardare a questo è quello che in genere si lavora
con e ottengo repository questo è il nostro
directory di lavoro, ho appena capito
ho estratto un paio di file
file 1 punto file txt 2 punti txt che ho mantenuto
aggiungendo qualche altro
e poi c’è una cartella git dot se
sei su Windows questo è nascosto da
di default ha l’attributo nascosto così
non puoi vederlo se non ti mostri nascosto
File
Li mostro sempre perché amo
entrano davvero
directory intendo che sai forse non farlo
apportare cambiamenti lì senza saperlo
cosa stai facendo ma sai che andiamo
cerchiamo bene così dentro
dot git directory ho un sacco di
altre directory questo è in realtà il mio
repository questo è il database questo è
come i miei lavori repository e uno di questi
le directory sono gli oggetti directory e
là dentro ne ho un paio di due
i nomi delle directory dei personaggi che ho detto di essere
guardando oggetto sei nove qualcosa così
i primi due caratteri corrispondono a
i primi due caratteri dell’oggetto
ID che è memorizzato lì
quindi i miei oggetti erano in realtà solo memorizzati
su disco oggetto sei nove otto quattro sei F
è solo in un file chiamato oggetto / 6 9 /
un 84 sei fuori non possiamo davvero guardare
che, direttamente se ho appena aperto il file su
è un file binario
in realtà è solo un file compresso così
invece ho intenzione di usare un comando git
chiamato cat file get will cat file
in realtà basta estrarre questo file e giusto
scaricarlo sullo schermo in modo da poter vedere
esattamente ciò che ottiene è la memorizzazione per un commit
e io solo di nuovo devo solo darlo
i primi caratteri della coppia appena sufficienti
dell’ID impegnarsi quanto basta per essere in grado
per trovare in modo univoco nel repository
e questo è in realtà il nostro commettere di nuovo
indica un albero che in realtà ha tutto
le modifiche puntano al suo genitore
è così che costruisce il diretto
grafico aciclico un negozio di commit è un
puntatore a suo genitore ce ne sono alcuni
i metadati e poi un messaggio di commit tu
sapere chi ha creato il commit e quando if
Voglio vedere l’albero che questo
impegni i punti a posso usare il file di campo
albero e sarò davvero deluso se
Lo faccio scopre che l’albero è uno dei
Pochissimi
formati nel repository git che è
binario solo per un po ‘di a
accelerando nel parsing posso usare a
comando diverso chiamato albero LS e
di nuovo mi limito a dargli l’ID e davvero
tutto ciò che fa è memorizzare la gerarchia di
il filesystem ho due file in
qui file un file txt punto su testo e I
può tornare al file cat per esaminare i BLOB
dal momento che nulla di binario su di loro e se io
esegui cat file blob Ho appena ottenuto il
contenuto del file quindi ci sono questi
formati di file molto molto semplici che sono
combinato per rendere un sistema molto potente
di nuovo se voglio questi tutti questi file
formati questi impegna questi che conosci
i file di testo fondamentalmente effettivamente costruiscono il
struttura del nostro repository se voglio
se guardo il mio commit più recente è
un impegno di fusione ha due genitori così
in realtà quando cammini quando tu
mostra il get grant appena inizia
il suggerimento che conosci il tuo commit più recente
trova i genitori e continua a disegnarli
questo è in realtà il modo in cui disegna il grafico
ok bene
i commit sono grandi ma si scopre
che è in grado di impegnarsi in una versione
il sistema di controllo non è davvero così utile
a meno che tu non possa anche diramarti se solo tu
avere un ramo se vuoi
tutto sta andando in master e se
stai registrando mentre lavori
su una funzione e Bob ha bisogno di spedire alcuni
bug molto importanti risolvono le tue caratteristiche
ottenendo spediti alla produzione da e
che non va bene così abbiamo filiali in modo
che posso lavorare sul mio film Bob
lavoro sulla sua soluzione di bug super- critica e
può spedire quel ramo alla produzione
mentre continuo a lavorare e non lo faccio
devi sapere vivere sotto la tirannia
della correzione del bug di Bob
rami e ottenere il nostro davvero intelligente
rami il loro intero obiettivo è quello di
per lo sviluppo parallelo l’abbiamo visto
ottenere supporto per lo sviluppo parallelo e
lo fa nella struttura del repository
giusto che io possa fare un cambiamento e Alice
può fare un cambiamento indipendentemente è
sviluppo parallelo così prende git
vantaggio di ciò nella sua ramificazione
struttura ottenere rami esistono al
livello di repository così diverso da alcuni
sistemi di controllo della versione centralizzata come
TFS o SVN dove hai un tronco
cartella e quindi si crea un ramo successivo
ad essa esiste un’altra cartella con i rami
a livello di repository e esistono
proprio come puntatori all’interno di questo grafico che
stiamo creando così sono
eccezionalmente leggeri sono molto
facile lavorare con questo ti incoraggia
ramo spesso e farti sapere in squadra
server di base devi essere un
amministratore per creare un ramo che
è terribile ma tu sai e puoi farcela
crea un ramo che esiste solo sul tuo
file system locale che nessun altro deve vedere
se non vuoi, conosci il
esperimento che hai fatto in questo
ramo si può semplicemente buttarlo via va bene
sono davvero solo un puntatore nel
grafico quindi se estendiamo questo questo questo
repository che abbiamo visto quando io
unì i cambiamenti di Alice che erano su di lei
si diramano nella mia e si sono trasferiti nella mia
filiale va bene per vedere quanto sia leggero
sono davvero qui nel mio punto git
cartella
ci andiamo qui nella mia cartella Doggett
accanto alla directory degli oggetti che è
dove tutti i nostri oggetti sono memorizzati è un
la directory chiamata avvolge e riposa è gentile
di un nome terribile ma ce ne sono due
directory all’interno di quei titoli e tag
i tag sono per tag che ha senso
le teste sono per i rami che non ma
se puoi mettere da parte il brutto nome se
entriamo nella directory dei nostri capi e guardiamo
a quello che c’è dentro abbiamo una finale
chiamato Alice e un file chiamato il mio e
questi in realtà corrispondono al
filiali nel mio repository adesso e
se riesco a recuperare il mio fidato log di git e
Eseguo get log – – graph – – one-line – –
decorare e se ti stanchi davvero
scrivendo questo questo è il mio preferito get
comando registrato è il mio modo preferito per
guarda la storia è – – grafico – –
una linea – – decorare se si ottiene veramente
stanco di digitare questo, faccio un alias che ho
alias get lol is what many people
mi fa sorridere ogni volta che lo gestisco così
Posso correre a prendere lol e quindi questo è quello che noi
visto prima, eccetto che ora stiamo decorando
i rami e la larghezza in modo da poter vedere
Alice indica che commetto il mio ramo
punti – a quello commettono e se guardiamo
a questi due file che sono in questo ref
directory di testa possiamo vedere come questo
lavori
il file Alice contiene solo un ID di commit
il file mime contiene anche solo un
commit ID questi sono davvero solo dei puntatori
nel grafico quando creo un nuovo
impegno che quel numero avanzerà così
mi muove in avanti se torno nel mio
directory di lavoro e modifichiamo il file 3
dot txt eccitiamoci sul file 3
testo cambiamo quel periodo in un
punto esclamativo
così quando lo faccio, se lo zoom, dice
noi che sul ramo mente abbiamo aggiornato
commit numero a 3 f9 d 0 6 e se noi
effettivamente guardiamo dentro le nostre teste refs mie
punta ora 2 a 3 F qualunque sia così
effettivamente avanzando quel puntatore ogni
tempo facciamo un commit ok ce n’è un altro
tipo speciale di puntatore di meta-ramo e
git che si chiama testa, ecco cosa
tiene traccia di quale ramo qui su e
questo è anche solo un file di testo all’interno del
git repository quindi se guardo questo file
avere la testa è così importante che
non nemmeno nemmeno in un
directory una sottodirectory all’interno del dock ancora
e in realtà è vero questo è il
solo il file che deve esistere per te
essere un repository git se viene sequestrato un file
chiamato la testa in tutte le protezioni vostro get
repository se non lo sei non io
non so cosa tu sia, no
importa se hai una directory di un oggetto
e una mensa di riposo puoi avere tutto questo
altre cose se non hai una testa tu
non sono una testa repository get è solo
anche un puntatore e codifica solo il
nome del repository scusate il nome di
il ramo in cui ti trovi in ​​questo caso
Sono sul ramo della miniera se cambio
i rami possono usare il checkout git come
in per controllare l’interruttore di ramo di Alice a
il ramo di Alice ora se guardo la testa
stilista di punta quindi git cambia ramo
semplicemente aggiornando quel file e poi
verificando le differenze è molto
molto efficiente ho intenzione di tornare indietro
al mio
cosa succede se io se creo un nuovo
commettiamo diciamo che avanziamo VI non posso
vedo anche che ho cambiato quell’esclamazione
rimandare a un punto, quindi di nuovo
il mio puntatore al mio ramo viene aggiornato
per indicare ancora la nuova testa di commit
resta puntato al mio così l’unica volta
i cambi di testa avvengono quando si controlla un nuovo
Branch e se guardo il mio mio log git
puoi vedere che la testa è avanzata
avanti il mio è avanzato in avanti ok così
questo è il più veloce
introduzione posso darti per ottenere
rami e come sono memorizzati localmente
e i rami sono grandi ma rami
non fare davvero nulla per te a meno che
puoi unirle, altrimenti saremo
semplicemente lavorando in repository separati
davvero e Allison i miei cambiamenti non lo faranno mai
coesistono così è qui che entra in gioco la fusione
abbiamo visto la fusione di te
conosci una sorta di Illustrated merging between
Allison e io già ma non l’abbiamo fatto
parla di cosa succede al ramo
puntatori quando lo facciamo quando vogliamo
uniamo le modifiche di Alice nel nostro noi
in realtà creare un nuovo commit e aggiornamento
il puntatore a questo e noi ci fondiamo così
è fondamentalmente un algoritmo di fusione a tre vie
molto simile a quello che sei abituato a vederlo
trova tutti i file ben dispiaciuto per prima cosa
trova l’antenato comune quindi se lo sono
unendo il mio ramo in torniamo indietro se
stiamo unendo il mio ramo in quello di Alice
ramo troviamo il nostro antenato comune super
facile e ottenere un server di Team Foundation
e sovversione che devi tenere traccia
di quali rami sono stati uniti quando
e ti faccio solo guardare nel grafico questo
questa informazione è codificata all’interno del
grafico l’ultimo punto in cui questi due
le filiali sono state unite o l’ultimo punto
o il punto in cui sono i primi
Ho sollecitato sia il tuo antenato comune e
puoi usare questo per l’ unione a tre vie
calcoli in modo da fare un unione a tre
guardi i file che sono diversi
nel mio ramo contro aalverson il comune
antenato e i file che sono
diverso tra il ramo di Alice del
antenato comune e poi si deve
fondere automaticamente quelli in modo da guardare il
linee che sono diverse e tu solo
tipo di andare passo dopo passo trovando il
differenze che ti danno un nuovo commit
e aggiorniamo i puntatori per farli stare bene
che aspetto ha in realtà?
repository grande quindi vado a destra
ora abbiamo abbiamo già fatto questo
Unisco Sto resettando a me stesso
punto in cui il mio ramo esisteva
il ramo di analisi esisteva e noi no
eppure li univa in un’altra grande cosa
su get posso solo eseguire get reset e
che metterà il puntatore del mio ramo su
qualsiasi punto nel tempo se eseguo git log ora
puoi vedere che non ho il cambiamento di Alice
giusto questo ha solo il mio cambiamento, ho un
bella storia lineare che ho ho avuto la
i primi tre impegni che abbiamo avuto
comune e ho creato un nuovo commit su
all’inizio, quando corro git unisco Alice
Sono richiamato per un messaggio di unione va bene
uno mi dispiace accidentalmente digitò il torto
cosa sto per creare un messaggio di fusione
e quando lo faccio, ottengo il nuovo aggiornamento
ramo e ancora crea questo bello
storia grafica per me va bene
quindi c’è un tipo speciale di unione e
ottenere e questo è chiamato un avanzamento rapido
unire e questo è qualcosa che può
esiste davvero solo in un distribuito
sistema di controllo della versione che utilizza un grafico
a sottostare al suo archivio dati cosa succederebbe se io
non avevo apportato alcuna modifica, quindi cosa succede se io
controllato un ramo e Alice aveva
controllato fuori filiale e lei l’aveva fatto
qualche cambiamento su di esso, proprio là era stato
qualche cambiamento andando nel mio ramo futuro
e volevo unire questi due rami
sembra davvero banale quando guardi
in questo modo proprio lì Non c’è un
molto da fare qui
e quindi che cosa fa git è solo mosse
il puntatore del ramo in avanti a destra non lo faccio
Non devo fare il tre vie
unire algoritmo perché non ce ne sono tre
modo giusto c’è un antenato comune e
c’è il mio impegno sono la stessa cosa
così invece di provare a fare un po ‘
calcolo su quali file hanno
cambiato in quale ramo sa
nulla è cambiato nel nostro ramo così
può semplicemente spostare quei puntatori in avanti e
è quello che fa così se tu mai
visto quel messaggio una fusione veloce
è successo , lo vedrai molto quando
fai un tiro se hai il flusso di lavoro
dove hai detto un ramo principale
di solito è il nome del tuo ramo principale
diciamo che hai un master branch e
si mantiene che esattamente al passo con
il server e si crea solo futuro
filiali si lavora solo in futuro
rami non hai mai fare qualsiasi lavoro per
te stesso e padrone che vorrete spesso
sai di essere aggiornato con
il server farà un tiro dal tuo
master da server master nel tuo
maestro e ti dirà che non è un
fusione veloce avanti è quello che è
facendo quando va bene così se io
in realtà tornare indietro
se torno al nostro antenato comune questo
è il commit numero tre che siamo stati
guardando e voglio unire Alice
ramo nel nostro
se corro git merge Alice ci dice
che ha fatto un rapido avanzamento okay tutto
è stato aggiornare i puntatori del ramo così
ora siamo B tre zero zero nove era
Alice prima di ora punta al mio
così va bene
non ha creato un nuovo commit che non ha
in realtà non ha creato una fusione in
la tua cronologia del grafico ma è fatta la
stessa cosa
efficacemente in termini di ciò che è nel tuo
directory di lavoro ha portato Alice
cambia nel nostro se davvero non lo fai
voglio farlo puoi evitarlo e
a volte non hai ragione a volte tu
in realtà voglio vedere come sono stati i cambiamenti
fatto se noi se resettiamo a te
posso dire – – no FF quando fai una fusione
e quello forzerà arrivare realmente
crea un merge commit puoi vederlo
dice l’ unione fatta dal ricorsivo
strategia se guardo il mio git loggarlo
in realtà in realtà fa un nuovo
impegnarsi per quello va bene c’è qualche valore
nel riuscire a vedere come si impegna
sono stati fatti come sono state le vostre fusioni
fatto e la pratica effettiva di ciò che è
è successo nel tuo repository al contrario
per usare semplicemente il fast forward convinto I
lo farei solo su integrazioni
personalmente sai se sto facendo un tiro
non si desidera creare un commit unione
ogni volta che fai un pull in master
probabilmente, ma questo può essere utile
se stai cercando di unire una funzione
diramarti su master e forse hai
ricalcolato è che è una che è una parola spaventosa
per un sacco di persone rebase non dovrebbe
essere
ciò che sta facendo il rebasing in realtà fa bene
c’è in realtà un paio di forme
di rebase c’è relase Interactive e
allora c’è solo il vecchio rebase regolare
rebase interactive è un tipo speciale di
una bestia ma è normale regolare rebase
davvero davvero semplice rebase
purtroppo rebase è uno di quelli
comandi che ho usato nell’esempio di
cattivi documenti di documentazione sono disponibili
forward ports local commit to to I
dimentica quello che ho totalmente dimenticato il
il meccanismo dietro a rebase è in realtà
davvero semplice qui abbiamo lo stesso
repository abbiamo guardato dove
avere un cambiamento Alice ha un cambiamento noi
potrebbe unire questi commit e farlo
otterremmo che bello sapere
storia grafica ma se non volevamo
che se volessimo davvero i nostri commit
per apparire più come una versione centralizzata
sistema di controllo in cui erano presenti i nostri commit
una linea retta che potrebbe essere più facile
seguirlo potrebbe essere più facile da fare
capisci quando stai guardando
la storia ovviamente in questo si conosce cinque
sei impegna tutto è facile da seguire
ma in un vero flusso di lavoro in cui hai
un sacco di persone che lavorano in modo indipendente
fianco a fianco il tuo grafico può diventare davvero
gnarly e quindi ribellione mi scusi
ribasare è un modo per mantenere una buona igiene
per il tuo grafico se vuoi e così via
puoi fare è puoi davvero prendere questo
impegnarsi e invece di voi questo lo sapete
divergenza nella storia che puoi solo cogliere
proprio lì come funziona in realtà
lavoro
quello che il git fa in questo caso è che sembra
alle modifiche tra i tuoi commit o
si impegna è possibile rebase diversi
commette e l’antenato comune e it
crea file di patch per ognuno di essi
quindi crea una patch per arrivare a questo
commettere da un antenato comune allora
controlla il cambiamento di Alice e si applica
quel file di patch con te sai si applica
patch questa è una sorta di modo strano per
fare cose
ma in realtà è davvero efficace e
quello che fa è creare quella patch
isolati solo i cambiamenti che hai avuto
fatto nel tuo ramo e poi controllando
fuori dal ramo di Alice puoi applicarli
i cambiamenti
se si applicano in modo pulito grandioso hai
quelle modifiche ora sul ramo di Alice se
loro non hanno conflitti e tu
devono risolverli e risolverli
i conflitti di rebase sono particolarmente
terribile perché come ho detto che puoi
rebase più commit alla volta e così
puoi dover risolvere lo stesso
conflitti ancora e ancora e ancora
quindi ribasare non è senza una certa quantità
di dolore di volta in volta prendiamo un
guarda cosa succede veramente, quindi posso
quindi a questo punto sono ancora solo sul
il mio ramo e se voglio prendere il mio
commetti solo questo impegno che ho
fatto indipendentemente da Alice e gentilezza
di portarlo da Alice in cima ad Alice
ramo posso eseguire git rebase Alice e
posso non fare commit qui
Non posso purtroppo essere troppo male
facciamo in realtà forzare un conflitto
lo facciamo
scusami, quindi aggiungerò lo stesso file
Alice di esso questo è garantito per
conflitto quando provo a rebase se corro
git rebase Alice quello che è intenzione di farlo
dice che ha dato un sacco di esso in uscita
dice la prima cosa che dice che è
riavvolgimento per riprendere il tuo lavoro
in cima a quello che è uno di quei messaggi
e vai dove è come non lo so
capisci cosa significa ciò che è
effettivamente fatto lì è il suo creato a
patch file di tutto il the
si impegna nel mio ramo che vuole
applicare su di Alice allora è riavvolto
la testa significa che è stato estratto
Il ramo di Alice tenta quindi di applicare
uno alla prima patch che ha realizzato
il mio primo impegno e che è riuscito esso
aveva provato ad applicare la seconda patch
che sapevamo sarebbe in conflitto perché noi
creato lo stesso file allo stesso tempo
e ora siamo in conflitto
okay, se guardiamo in realtà sono serio
diamo un’occhiata all’interno del cancello
directory c’è questo rebase si applicano
directory e lì dentro c’è un
un sacco di roba e uno di quelli che facciamo
pensi che sto scherzando è un file di patch
che in realtà questo è UNIX vecchia scuola
file di patch che descrive come ottenere
dal mio primo impegno al mio secondo
impegnarsi e cerca di applicarlo ora
in cima a quello che c’è nel ramo di Alice e di
Certo che posso sistemare i miei impegni se lo sono
old-school e UNIX II Ho appena ricevuto un file
con un po ‘di frecce e io prendo
quale voglio io posso ovviamente invocare
un vero strumento di unione libera se non lo sono
quindi UNIX II ma sai che lavoro a
Microsoft sono molto dispiaciuto per rebase UNIX II
continua e ho fatto un commit in
metà del mio rebase che mi mette in a
terribile stato terribile e invece di
parlando troppo di quello che sto per fare
resettandomi da solo, hey oh mio
Dio non ho azzerato la mia via d’uscita bene
sarò rebase abortire ehi ci andiamo faremo
solo la mano saluta e fa finta che non sia così
capita che ho finito per mettere accidentalmente
me stesso in uno stato di testa distaccato che esso
in tutto il bene ottenere le cose è un
cosa terribile in realtà sai cosa io
di solito non soffermarsi troppo su
teste distaccate cosa significa che ha
qualcuno ha visto questo messaggio sei in un
stato di testa distaccato hai fatto mantenere
la tua mano se sapevi cosa significava
c’è un paio di persone va bene così
cosa vuol dire essere distaccato
stato generale in generale che abbiamo
guardato questo file principale prima di destra
questo è il puntatore di arte tua attuale
ramo se tu se si staccare la testa così
parlare oh formaggio arrivare un mucchio
di modi in cui puoi farlo nel modo più semplice
il modo più comune che succede è quando
accidentalmente rovini nel mezzo
di un rebase perché quando git fa quello
riavvolgimento della testa
in realtà stacca la tua testa, oh mio dio
Mi dispiace, non posso crederci
queste parole a voce alta non lo fanno nemmeno
ho senso per me, ma quello che è fatto è
in realtà è controllato solo per il commit
non controlla un ramo che controlla
fuori un impegno e questo è qualcosa che tu
può fare e ottenere se si esegue semplicemente git
checkout con un ID di commit che ti darà
questo enorme avvertimento su come sei in un
stato di testa distaccato e cosa effettivamente
succede è il tuo file di testa invece di
contenente un ramo ora è ora
sembra un normale ramo dove
punta a un ID di commit invece e così il
Lo stesso succede se lo fossi a sapere
modificare un file e commetterlo la mia testa
puntatore si muove ancora in avanti a destra I
ancora creato un commit in cima al vecchio
un mio ramo punta il puntatore della mia testa
va ancora avanti ma ora è fermo
solo indicando quel prossimo impegno che
è davvero insoddisfacente, quindi non lo sono davvero
su un ramo ed è davvero facile da perdere
cambia in questo modo perché non c’è
puntatore di ramo che punta ad esso così se io
controlla il mio mi dà questo grande
avvertendo che sto perdendo le mie modifiche
perché sono stati fatti su un distaccato
testa quindi non entrare in un distaccato
stato della testa se lo fai è facile da ottenere
fuori senza perdere le modifiche così
in questo momento sono in una testa staccata solo
la testa sta puntando al mio impegno, io no
avere un puntatore di ramo che punta ad esso a
puntatore vero e proprio
Posso creare totalmente un ramo facile di
ramo va bene così ora sono recuperato dal mio
stato della testa staccata che non ho perso
tutto ok, quindi questo è ribadire
veramente veloce abbiamo parlato di come
repository funziona sotto il cappuccio reale
rapidamente parliamo del funzionamento
directory e importante l’indice il
indice contiene un elenco di tutti i tuoi
file e posso usare un altro divertente ottenere
ragazzo incorporato
scusami , vediamo come posso uscire
questo qui andiamo, ne posso usare un altro
divertente built-in chiamato file LS e così via
è il mio indice quando esegui git add quando
si esegue git RM manipola questo file
l’indice è unico da ottenere ed è
in realtà una delle cose più potenti
questo è ciò che effettivamente viene trasformato in
il mio prossimo impegno quindi se modifico qualche file
ed eseguo lo stato git che mi dice
questo file è ora non tracciato se eseguo git
File LS – – questa fase probabilmente non lo è
qualcosa che vuoi fare su un normale
base, ma se ti piace giocare con il
l’indice va bene e puoi guardarlo
puoi vedere che ho ancora file1
file2 file 3 se eseguo get aggiungi aggiunge
file per il testo per l’indice così
in realtà hash file per il testo, quindi quando I
run get add mette l’oggetto nel mio
database degli oggetti che gli hash si va in
per ottenere oggetti 2 5 7 vedi blah blah blah
e mette che nell’indice ora quando
eseguire lo stato get mi dice che sta per
essere impegnato, quindi cosa sta succedendo
ecco quando viene mostrato lo stato è
mostrandoti i cambiamenti non modificati che
è in realtà solo eseguendo il diff
tra ciò che è nella tua directory di lavoro
e cosa c’è nel tuo indice così quando noi
crea un file per il disco che era nel nostro
directory di lavoro non nel nostro indice esso
era un cambiamento non è stato classificato quando aggiungiamo a
l’indice diventa un cambio di scena e
calcola quello calcolando il
differenza tra l’indice e ciò che è
nella tua testa va bene
questo è l’indice in poche parole è totale
risulta che usa l’indice per un sacco di
altre cose, ma come quando si uniscono tutti
questo va all’indice che stiamo per fare
gloss su quello per ora purtroppo lo siamo
a corto di tempo
se ci sono delle domande sarò
aggirarsi dopo che mi scuso
non sono arrivato qui probabilmente fuori
perché voglio dare il prossimo oratore
un sacco di tempo per impostare, ma lo spero
si sa per cracking aperto il cancello
repository abbiamo visto qualcosa di quello che è
dentro e non è così spaventoso
posiziona davvero e usalo usando il git
comandi è in realtà solo una patina sopra
manipolando questi oggetti così vedendo
come funziona un po ‘di questo
Spero che tu abbia visto forse come
funziona un po ‘ meglio per te per favore
vota questa sessione se non ti piace
fammi sapere perché effettivamente lo do
parlo molto quindi mi piacerebbe sapere che lo sai
se non ti piace, ma grazie
grazie per aver reso questo il tuo primo te
conosco la sessione qui a go-to spero che tu
buon riposo della settimana quindi grazie
tu

Please follow and like us: