2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
aiheeseen liittyvä:
git reuse recorded resolution
(rerere
) Yhdistä ristiriitaiset Git-versiotOrphan branches
)jos git
Kirjasto on paikallinen, ja vaikka koodia ei tarvitsisi jakaa etänä, paikallista konttoria voidaan hallita kuin varastoa, joka on jaettava etänä. Kuten tässä esimerkissä näkyy, sinun on ensin kopioitava varasto paikalliselle alueelle, mikä tarkoittaa, että siellä on etäkirjasto.
# clone the jgit repository to match
$ git clone https://git.eclipse.org/r/jgit/jgit
$ cd jgit
# Whenever you start working on a bug fix or a new
# feature in your project, you should create a branch
$ git branch newBugFix
$ git branch
* master
newBugFix
# The newBugFix branch points to the current HEAD
# to verify this:
$ git log -1 newBugFix --format=format:%H
25fe20b2dbb20cac8aa43c5ad64494ef8ea64ffc
# edit branch description
$ git branch --edit-description newBugFix
# Add description in a newly opened editor
Refactoring the Hydro controller
The hydro controller code is currently horrible needs to be refactored.
# Show the description
$ git config --get branch.newBugFix.description
Refactoring the Hydro controller
The hydro controller code is currently horrible and needs to be refactored.
# Show the commit hash the new branch based on
$ cat .git/refs/heads/newBugFix
25fe20b2dbb20cac8aa43c5ad64494ef8ea64ffc
Voidaan nähdä, että ID
virran kanssaHEAD
/ID
johdonmukainen.
Huomautus: Kun olet luonut uuden haaran, sinun on vaihdettava tähän haaraan käyttääksesi:git checkout -b <newBranch>
Laajenna: Jos et seuraa HEAD
Luo uusi haara, mutta tietty toimitustunnus (979e346
), tällä hetkellä tähän versioon perustuva lähetys voidaan kirjoittaa:
# new branch from commit ID
$ git branch anotherBugFix 979e346
$ git log -1 anotherBugFix --format=format:%h
979e346
$ git log -1 anotherBugFix --format=format:%H
979e3467112618cc787e161097986212eaaa4533
# checkout new branch
$ git checkout -b lastBugFix 979e346
Katso sivuliikkeen tiedot:
git branch
: vain sivuliikkeen nimigit branch -v
: Annotoitu ja yksinkertaistettu 1:n perusteella SHA-1
git branch -vv
: Näytä etäseurantahaarojen nimet 2$ git branch -v
anotherBugFix 979e346 Interactive Rebase: Do actions if
* lastBugFix 979e346 Interactive Rebase: Do actions if
master 25fe20b Add missing package import for jg
newBugFix 25fe20b Add missing package import for jg
$ git branch -vv
anotherBugFix 979e346 Interactive Rebase: Do actions if e
* lastBugFix 979e346 Interactive Rebase: Do actions if e
master 25fe20b [origin/master] Add missing package
newBugFix 25fe20b Add missing package import for g
Joskus natiivikoodi voidaan luoda jonkun muun koodikannan kloonista.Tässä vaiheessa paikallisella koodilla on etävarasto, jota yleensä kutsutaanorigin
lähde.Ymmärtääksesi Gitin ja sen etäkoodipohjan, voit aloittaagit status
Komento alkaa:
$ git checkout -b remoteBugFix --track origin/stable-3.2
Switched to a new branch 'remoteBugFix'
Branch 'remoteBugFix' set up to track remote branch 'stable-3.2' from 'origin'.
näkyvissä,remoteBugFix
Haaran etäseurantahaara onorigin/stable-3.2
.Tällä hetkellägit status
Tulokset osoittavat paikallistaHEAD
kaukosäätimelläHEAD
Voiko paikallinen haara pikalähettää etähaaraan. Esimerkkejä ovat seuraavat:
# Find a commit on remote branch
$ git log -10 origin/stable-3.2 --oneline
# Checkout specific SHA-1
$ git reset --hard 2e0d178
HEAD is now at 2e0d17885 Add recursive variant of Config.getNames() methods
# Use 'git status' to see the free benefit of Git
$ git status
On branch remoteBugFix
Your branch is behind 'origin/stable-3.2' by 9 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
nothing to commit, working tree clean
Ilmoitus:
fast-forward
, tarkoittaa, että Git voi sulautua HEAD
Siirry uusimpaan versioon;git pull
Komento on itse asiassa kahden komennon yhdistelmä:git fetch
git merge
(Yhdistä etäseurantahaara paikalliseen haaraan)Suorita yllä oleva git status
komentoa käytetään simuloimaan paikallista suoritustagit fetch
Tämän jälkeen etähaaran uusi sisältö on vedetty paikalliseen seurantahaaranorigin/stable-3.2
Tila. Yhdistämisen jatkaminen synkronoidaan itse asiassa paikallisen haaran kanssa:
$ git merge origin/stable-3.2
Updating 2e0d17885..f839d383e
Fast-forward
.../org/eclipse/jgit/api/RebaseCommandTest.java | 213 +++++++++++++++++----
.../src/org/eclipse/jgit/api/RebaseCommand.java | 31 +--
.../jgit/errors/IllegalTodoFileModification.java | 59 ++++++
.../eclipse/jgit/lib/BaseRepositoryBuilder.java | 2 +-
.../src/org/eclipse/jgit/lib/Config.java | 2 +
.../src/org/eclipse/jgit/lib/RebaseTodoLine.java | 16 +-
6 files changed, 266 insertions(+), 57 deletions(-)
create mode 100644 org.eclipse.jgit/src/org/eclipse/jgit/errors/IllegalTodoFileModification.java
Toteutustulosten mukaan voidaan nähdä, että as git status
Kuten kehotteessa todettiin, tämä yhdistäminen on pikaliitos (fast-forward merge
)
Paikallisen haaran luomisen lisäksi --track
Määritä etäseurantahaara,git
Myös olemassa olevien sivukonttoreiden etähaarojen määrittämiseen on olemassa tuki. Jos luot paikallisen haaran etukäteen ja unohdat liittää etähaaran,git
Tämä myöhäinen sidontaominaisuus on hyödyllinen:
# Checkout a new branch without relating to its remote tracking branch
$ git checkout -b remoteBugFix2 2e0d17
Switched to a new branch 'remoteBugFix2'
# Set the tracking branch manually by using -u or --set-upstream-to
$ git branch --set-upstream-to origin/stable-3.2
Branch remoteBugFix2 set up to track remote branch stable-3.2 from origin.
# Validate current status
$ git status
On branch remoteBugFix2
Your branch is behind 'origin/stable-3.2' by 9 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
nothing to commit, working directory clean
# Same as the previous demo as expected.
# Update the branch (also a fast-forward merge with origin/stable-3.2)
$ git pull
Updating 2e0d17885..f839d383e
Fast-forward
.../org/eclipse/jgit/api/RebaseCommandTest.java | 213 +++++++++++++++++----
.../src/org/eclipse/jgit/api/RebaseCommand.java | 31 +--
.../jgit/errors/IllegalTodoFileModification.java | 59 ++++++
.../eclipse/jgit/lib/BaseRepositoryBuilder.java | 2 +-
.../src/org/eclipse/jgit/lib/Config.java | 2 +
.../src/org/eclipse/jgit/lib/RebaseTodoLine.java | 16 +-
6 files changed, 266 insertions(+), 57 deletions(-)
create mode 100644 org.eclipse.jgit/src/org/eclipse/jgit/errors/IllegalTodoFileModification.java
# The output is still the same as previous one as expected.
# Validate the current HEAD with origin/stable-3.2
$ git log -1 origin/stable-3.2 --format=format:%h
f839d383e
# Still the same.
Ennen tämän kirjan lukemista olet ehkä nähnyt monia esimerkkejä ohjelmistojen toimitusketjuista ja haarautuvista malleista, mutta olet ehkä kokeillut erilaisia strategioita, mutta huomasit, että kun työkalu tukee tiettyä työnkulkua, sen toteuttaminen on vaikeaa haluamasi sovellusskenaariot. Ja Git tukee melkein kaikkia työnkulkuskenaarioita. Yleinen vaatimus on pystyä luomaan yhdistämissitoumus ominaisuutta yhdistettäessä (vaikka uusia ominaisuuksia voidaan sisällyttää eteenpäin kelaustilassa). Tällaista vaatimusta käytetään usein osoittamaan, että tietty ominaisuus on yhdistetty ja haluat, että tämä yhdistämistoiminto tallennetaan erikseen varastoon.
Vinkkejä
Sitä vastoin
Git
Tarjoaa kätevän ja nopean tavan käyttää kaikkia lähetystietoja,Git
Kirjastoa pitäisi itse asiassa käyttääHirsi, ei vain lähdekoodia varmuuskopioida。
Seuraava esimerkki luo pakotetun yhdistämistoimituksen:
# Checkout branch stable-3.1 as remoteOldBugFix for use
$ git checkout -b remoteOldBugFix --track origin/stable-3.1
# force a merge commit
$ git merge origin/stable-3.2 --no-ff --edit --quiet
Huomaa, käytä --edit
Parametrien asettamisen jälkeen voit muokata oletusarvoisia yhdistämistoimituskommenttitietoja avautuvassa editorissa.esimerkissä--no-ff
Ilmaisee pikakelaustilan käytöstä poistamisen;--quiet
Käytetään näytön sisällön yksinkertaistamiseen. Lopullinen vaikutus näkyy kuvassa:
Vertaaksesi normaaliin tapaan poista, kun suoritat yhdistämistä --no-ff
Parametrikohteet:
# Reset to initial status
$ git reset --hard remotes/origin/stable-3.1
# Merge with fast forward by default
$ git merge origin/stable-3.2 --quiet
Vaikutus on seuraava:
Täydellisen yhdistämisen lisäksi Git antaa käyttäjille mahdollisuuden puuttua yhdistettyyn sisältöön ja päättää itsenäisesti, mitä sisältöä yhdistämiseen sisältyy.käyttää--no-commit
parametri,git
Keskeyttää prosessin ennen yhdistämistoimitusta, jolloin käyttäjä voi muokata tai lisätä tiedostoja ennen lopullista toimitusta. Esimerkiksi projektin versionumeroa muutetaan projektin ominaisuushaarassa, mutta päähaaraa ei muokata. Oletusyhdistystoiminto päivittää versionumeron ominaisuushaaran versionumeroksi, mutta itse asiassa et halua muuttaa versionumeroa.Käytä tätä aikaa--no-commit
voidaan välttää.
Seuraava esimerkki havainnollistaa yhdistämistoiminnon käyttäjän toimilla. Kun yhdistät, haluat sulkea pois lisenssitiedoston päivittäneen toimituksen manuaalisesti:
# Clone repo into demo
$ git clone https://github.com/PacktPublishing/Git-Version-Control-Cookbook-Second-Edition_hello_world_flow_model.git demo
$ cd demo
# Checkout remote branch
$ git checkout -b remotePartlyMerge --track origin/release/1.0
Branch remotePartlyMerge set up to track remote branch release/1.0 from origin.
Switched to a new branch 'remotePartlyMerge'
# Force a merge commit with --no-commit flag
$ git merge origin/master --no-ff --no-commit
Automatic merge went well; stopped before committing as requested
# Exclude LICENSE file
$ git reset LICENSE
# Resume merging
$ git commit -m "Merging without LICENSE"
[remotePartlyMerge 1202b0e] Merging without LICENSE
# Check status (only LICENSE file remain untracked)
$ git status
On branch remotePartlyMerge
Your branch is ahead of 'origin/release/1.0' by 6 commits.
(use "git push" to publish your local commits)
Untracked files:
(use "git add <file>..." to include in what will be committed)
LICENSE
nothing added to commit but untracked files present (use "git add" to track)
# check difference excluding LICENSE file (only on Linux)
$ git diff origin/master !(LICENSE)
Ottaen huomioon verkon nopeuden ongelman, näytevarasto on ollut Git-Version-Control-Cookbook-Second-Edition_hello_world_flow_model.git
Lisää tähän oppimiskirjastoon (repos/ex3.3-no-commit-repo.rar
)