τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
σχετικό θέμα:
git reuse recorded resolution
(rerere
) Συγχώνευση αντικρουόμενων εκδόσεων GitOrphan branches
)αν git
Η βιβλιοθήκη είναι τοπική και, ακόμη κι αν δεν χρειάζεται να κοινοποιήσετε τον κωδικό εξ αποστάσεως, η διαχείριση του τοπικού υποκαταστήματος μπορεί να γίνει σαν μια αποθήκη που πρέπει να κοινοποιηθεί εξ αποστάσεως. Όπως φαίνεται σε αυτό το παράδειγμα, πρέπει πρώτα να αντιγράψετε μια αποθήκη στην τοπική περιοχή, πράγμα που σημαίνει ότι υπάρχει μια απομακρυσμένη βιβλιοθήκη.
# 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
Μπορεί να φανεί ότι το ID
με ρεύμαHEAD
τουID
σταθερός.
Σημείωση: Αφού δημιουργήσετε έναν νέο κλάδο, πρέπει να μεταβείτε σε αυτόν τον κλάδο για να χρησιμοποιήσετε:git checkout -b <newBranch>
Ανάπτυξη: Εάν δεν ακολουθήσετε HEAD
Δημιουργήστε ένα νέο κλάδο, αλλά ένα συγκεκριμένο αναγνωριστικό δέσμευσης (979e346
), αυτή τη στιγμή η υποβολή που βασίζεται σε αυτήν την έκδοση μπορεί να γραφτεί:
# 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
Προβολή πληροφοριών υποκαταστήματος:
git branch
: μόνο όνομα υποκαταστήματοςgit branch -v
: Σχολιασμένο και απλοποιημένο με βάση το 1 SHA-1
git branch -vv
: Εμφάνιση ονομάτων υποκαταστημάτων απομακρυσμένης παρακολούθησης με βάση το 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
Μερικές φορές, ο εγγενής κώδικας μπορεί να δημιουργηθεί από έναν κλώνο της βάσης κώδικα κάποιου άλλου.Σε αυτό το σημείο, ο τοπικός κωδικός έχει μια απομακρυσμένη αποθήκη, που συνήθως ονομάζεταιorigin
πηγή.Για να κατανοήσετε το Git και την απομακρυσμένη βάση κώδικα του, μπορείτε να ξεκινήσετε μεgit status
Η εντολή ξεκινά:
$ 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'.
ορατός,remoteBugFix
Ο κλάδος απομακρυσμένης παρακολούθησης του υποκαταστήματος είναιorigin/stable-3.2
.Αυτή τη στιγμήgit status
Τα αποτελέσματα δείχνουν την τοπικήHEAD
με τηλεχειριστήριοHEAD
Εάν το τοπικό υποκατάστημα μπορεί να προωθηθεί γρήγορα στο απομακρυσμένο υποκατάστημα. Παραδείγματα είναι τα εξής:
# 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
Ειδοποίηση:
fast-forward
, σημαίνει ότι το Git μπορεί να συγχωνευθεί HEAD
Μετακίνηση στην πιο πρόσφατη έκδοση.git pull
Η εντολή είναι στην πραγματικότητα ένας συνδυασμός δύο εντολών:git fetch
git merge
(Συγχώνευση κλάδου απομακρυσμένης παρακολούθησης σε τοπικό υποκατάστημα)Εκτελέστε τα παραπάνω git status
Η εντολή χρησιμοποιείται για την προσομοίωση τοπικής εκτέλεσηςgit fetch
Μετά από αυτό, το νέο περιεχόμενο στον απομακρυσμένο κλάδο έχει τραβηχτεί στον τοπικό κλάδο παρακολούθησηςorigin/stable-3.2
κατάσταση. Η συνέχιση της συγχώνευσης θα συγχρονιστεί στην πραγματικότητα με τον τοπικό κλάδο:
$ 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
Σύμφωνα με τα αποτελέσματα της εκτέλεσης, μπορεί να φανεί ότι ως git status
Όπως αναφέρεται στη γραμμή εντολών, αυτή η συγχώνευση είναι συγχώνευση γρήγορης προώθησης (fast-forward merge
)
Εκτός από τη χρήση κατά τη δημιουργία ενός τοπικού υποκαταστήματος --track
Καθορίστε τον κλάδο απομακρυσμένης παρακολούθησης,git
Υπάρχει επίσης υποστήριξη για τον καθορισμό απομακρυσμένων υποκαταστημάτων σε υπάρχοντες κλάδους. Εάν δημιουργήσετε ένα τοπικό υποκατάστημα εκ των προτέρων και ξεχάσετε να συσχετίσετε το απομακρυσμένο υποκατάστημα,git
Αυτό το χαρακτηριστικό όψιμο δέσιμο είναι χρήσιμο:
# 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.
Πριν διαβάσετε αυτό το βιβλίο, μπορεί να έχετε δει πολλά παραδείγματα αλυσίδων παράδοσης λογισμικού και μοντέλων διακλάδωσης, μπορεί επίσης να δοκιμάζατε διαφορετικές στρατηγικές, μόνο για να διαπιστώσετε ότι όταν ένα εργαλείο υποστηρίζει μια συγκεκριμένη ροή εργασίας, είναι δύσκολο να το εφαρμόσετε πλήρως σενάρια εφαρμογών που θέλετε. Και το Git υποστηρίζει σχεδόν όλα τα σενάρια ροής εργασίας. Μια κοινή απαίτηση είναι να μπορείτε να δημιουργήσετε μια δέσμευση συγχώνευσης κατά τη συγχώνευση μιας δυνατότητας (ακόμη και αν νέες δυνατότητες μπορούν να ενσωματωθούν σε λειτουργία γρήγορης προώθησης). Μια τέτοια απαίτηση χρησιμοποιείται συχνά για να υποδείξει ότι ένα συγκεκριμένο χαρακτηριστικό έχει συγχωνευθεί και θέλετε αυτή η λειτουργία συγχώνευσης να αποθηκευτεί ρητά στην αποθήκη.
Συμβουλές
Ενώ
Git
Παρέχει έναν βολικό και γρήγορο τρόπο πρόσβασης σε όλες τις πληροφορίες υποβολής,Git
Η βιβλιοθήκη πρέπει πραγματικά να χρησιμοποιηθεί ωςκούτσουρο, όχι μόνο τον πηγαίο κώδικα αντιγράφων ασφαλείας。
Το ακόλουθο παράδειγμα θα δημιουργήσει μια υποχρεωτική δέσμευση συγχώνευσης:
# 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
Σημείωση, χρήση --edit
Αφού ρυθμίσετε τις παραμέτρους, μπορείτε να τροποποιήσετε τις προεπιλεγμένες πληροφορίες σχολίων δέσμευσης συγχώνευσης στο πρόγραμμα επεξεργασίας που ανοίγει.στο παράδειγμα--no-ff
Υποδεικνύει την απενεργοποίηση της λειτουργίας γρήγορης προώθησης.--quiet
Χρησιμοποιείται για την απλοποίηση του περιεχομένου εξόδου οθόνης. Το τελικό αποτέλεσμα φαίνεται στο σχήμα:
Για σύγκριση με τον κανονικό τρόπο, διαγράψτε κατά την εκτέλεση συγχώνευσης --no-ff
Στοιχεία παραμέτρων:
# 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
Το αποτέλεσμα είναι το εξής:
Εκτός από την εκτέλεση μιας πλήρους συγχώνευσης, το Git επιτρέπει επίσης στους χρήστες να παρεμβαίνουν στο συγχωνευμένο περιεχόμενο και να αποφασίζουν ανεξάρτητα ποιο περιεχόμενο περιλαμβάνεται στη συγχώνευση.χρήση--no-commit
παράμετρος,git
Θα διακόψει τη διαδικασία πριν από τη δέσμευση συγχώνευσης, επιτρέποντας στον χρήστη να τροποποιήσει ή να προσθέσει αρχεία πριν από την τελική δέσμευση. Για παράδειγμα, ο αριθμός έκδοσης του έργου τροποποιείται στον κλάδο δυνατοτήτων του έργου, αλλά ο κύριος κλάδος δεν τροποποιείται. Η προεπιλεγμένη λειτουργία συγχώνευσης θα ενημερώσει τον αριθμό έκδοσης στον αριθμό έκδοσης στον κλάδο δυνατοτήτων, αλλά στην πραγματικότητα δεν θέλετε να αλλάξετε τον αριθμό έκδοσης.Χρησιμοποιήστε αυτή τη φορά--no-commit
μπορεί να αποφευχθεί.
Το ακόλουθο παράδειγμα δείχνει μια λειτουργία συγχώνευσης με παρέμβαση χρήστη. Κατά τη συγχώνευση, θέλετε να εξαιρέσετε μη αυτόματα το commit που ενημέρωσε το αρχείο άδειας χρήσης:
# 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)
Λαμβάνοντας υπόψη το πρόβλημα της ταχύτητας του δικτύου, το αποθετήριο δειγμάτων έγινε Git-Version-Control-Cookbook-Second-Edition_hello_world_flow_model.git
Προσθήκη σε αυτήν τη βιβλιοθήκη εκμάθησης (repos/ex3.3-no-commit-repo.rar
)