-
1. Ξεκινώντας με το Git
-
2. Τα θεμελιώδη στοιχεία του Git
-
3. Διακλαδώσεις στο Git
-
4. Το Git στον διακομιστή
- 4.1 Τα πρωτόκολλα
- 4.2 Εγκατάσταση του Git σε διακομιστή
- 4.3 Δημιουργία δημόσιου κλειδιού SSH
- 4.4 Στήσιμο του διακομιστή
- 4.5 Δαίμονες του Git
- 4.6 Έξυπνο HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Επιλογές φιλοξενίας από τρίτους
- 4.10 Ανακεφαλαίωση
-
5. Κατανεμημένο Git
-
6. GitHub
-
7. Εργαλεία του Git
- 7.1 Επιλογή αναθεώρησης
- 7.2 Διαδραστική εργασία με το στάδιο καταχώρισης
- 7.3 stash και clean
- 7.4 Υπογραφή της δουλειάς μας
- 7.5 Αναζήτηση
- 7.6 Η ιστορία ξαναγράφεται
- 7.7 Απομυθοποίηση της reset
- 7.8 Συγχωνεύσεις για προχωρημένους
- 7.9 Rerere
- 7.10 Αποσφαλμάτωση με το Git
- 7.11 Λειτουργικές υπομονάδες
- 7.12 Δεμάτιασμα δεδομένων
- 7.13 Replace
- 7.14 Αποθήκευση διαπιστευτηρίων
- 7.15 Ανακεφαλαίωση
-
8. Εξατομίκευση του Git
-
9. Το Git και άλλα συστήματα
- 9.1 Το Git ως πελάτης
- 9.2 Μετανάστευση στο Git
- 9.3 Ανακεφαλαίωση
-
10. Εσωτερική λειτουργία του Git
- 10.1 Διοχετεύσεις και πορσελάνες
- 10.2 Αντικείμενα του Git
- 10.3 Αναφορές του Git
- 10.4 Πακετάρισμα αρχείων
- 10.5 Τα refspec
- 10.6 Πρωτόκολλα μεταφοράς
- 10.7 Διατήρηση και ανάκτηση δεδομένων
- 10.8 Μεταβλητές περιβάλλοντος
- 10.9 Ανακεφαλαίωση
-
A1. Appendix A: Το Git σε άλλα περιβάλλοντα
- A1.1 Γραφικές διεπαφές
- A1.2 Το Git στο Visual Studio
- A1.3 Git στο Eclipse
- A1.4 Το Git στο Bash
- A1.5 Το Git στο Zsh
- A1.6 Το Git στο Powershell
- A1.7 Ανακεφαλαίωση
-
A2. Appendix B: Ενσωμάτωση του Git στις εφαρμογές μας
- A2.1 Γραμμή εντολών Git
- A2.2 Libgit2
- A2.3 JGit
-
A3. Appendix C: Εντολές Git
- A3.1 Ρύθμιση και διαμόρφωση
- A3.2 Λήψη και δημιουργία έργων
- A3.3 Βασική λήψη στιγμιοτύπων
- A3.4 Διακλάδωση και συγχώνευση
- A3.5 Κοινή χρήση και ενημέρωση έργων
- A3.6 Επιθεώρηση και σύγκριση
- A3.7 Αποσφαλμάτωση
- A3.8 Επιθέματα
- A3.9 Ηλεκτρονικό ταχυδρομείο
- A3.10 Εξωτερικά Συστήματα
- A3.11 Διοίκηση
- A3.12 Εντολές διοχέτευσης
7.2 Εργαλεία του Git - Διαδραστική εργασία με το στάδιο καταχώρισης
Διαδραστική εργασία με το στάδιο καταχώρισης
Το Git έχει μερικά script που διευκολύνουν μερικές εργασίες στη γραμμή εντολών. Εδώ θα δούμε μερικές διαδραστικές εντολές που μπορούν να μας βοηθήσουν να κοψοράψουμε εύκολα τις υποβολές μας ώστε να περιλάβουμε μόνο ορισμένους συνδυασμούς και τμήματα αρχείων. Αυτά τα εργαλεία είναι πολύ χρήσιμα αν τροποποιήσουμε κάμποσα αρχεία και στη συνέχεια αποφασίσουμε ότι θέλουμε αυτές οι αλλαγές να είναι σε περισσότερες συνεκτικές υποβολές και όχι σε μια μεγάλη ακατάστατη υποβολή. Με αυτόν τον τρόπο μπορούμε να βεβαιωθούμε ότι οι υποβολές μας είναι λογικά διαχωρισμένες και μπορούν εύκολα να αναθεωρηθούν από τους προγραμματιστές που συνεργάζονται μαζί μας.
Αν εκτελέσουμε την git add
με την επιλογή -i
ή --interactive
, το Git μεταβαίνει σε λειτουργία διαδραστικού κελύφους, εμφανίζοντας κάτι σαν αυτό:
$ git add -i
staged unstaged path
1: unchanged +0/-1 TODO
2: unchanged +1/-1 index.html
3: unchanged +5/-1 lib/simplegit.rb
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now>
Μπορούμε να δούμε ότι αυτή η εντολή μας δείχνει μια πολύ διαφορετική εικόνα του σταδίου καταχώρισής μας —βασικά δίνει τις ίδιες πληροφορίες που παίρνουμε με την git status
αλλά λίγο πιο συνοπτικά και ενημερωτικά.
Εμφανίζει τις αλλαγές που έχουμε προετοιμάσει για υποβολή στα αριστερά και τις υπόλοιπες στα δεξιά.
Μετά από αυτό έρχεται ένα τμήμα εντολών (Commands). Εδώ μπορούμε να κάνουμε πολλά πράγματα, όπως προσθήκη αρχείων στο στάδιο καταχώρισης, απόσυρση αρχείων από το στάδιο καταχώρισης, προσθήκη τμημάτων αρχείων στο στάδιο καταχώρισης, προσθήκη μη παρακολουθύμενων αρχείων και εμφάνιση diff αρχείων που βρίσκονται στο στάδιο καταχώρισης.
Προσθήκη σε και απόσυρση από το στάδιο καταχώρισης
Εάν πληκτρολογήσουμε 2
ή u
στην ερώτηση What now>
, το script μάς ρωτά ποια αρχεία που θέλουμε να προστεθούν στο στάδιο καταχώρισης:
What now> 2
staged unstaged path
1: unchanged +0/-1 TODO
2: unchanged +1/-1 index.html
3: unchanged +5/-1 lib/simplegit.rb
Update>>
Για να προσθέσουμε τα TODO και index.html, μπορούμε να πληκτρολογήσουμε τους αριθμούς τους:
Update>> 1,2
staged unstaged path
* 1: unchanged +0/-1 TODO
* 2: unchanged +1/-1 index.html
3: unchanged +5/-1 lib/simplegit.rb
Update>>
Το *
δίπλα σε κάθε αρχείο σημαίνει ότι το αρχείο έχει επιλεγεί για να προστεθεί στο στάδιο καταχώρισης.
Εάν πατήσουμε το πλήκτρο Enter αφού πληκτρολογήσουμε κάτι στην προτροπή Update>>
, το Git παίρνει ο,τιδήποτε έχει επιλεγεί και το προσθέτει στο στάδιο καταχώρισης:
Update>>
updated 2 paths
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now> 1
staged unstaged path
1: +0/-1 nothing TODO
2: +1/-1 nothing index.html
3: unchanged +5/-1 lib/simplegit.rb
Τώρα μπορούμε να δούμε ότι τα αρχεία TODO και index.html έχουν προστεθεί στο στάδιο καταχώρισης ενώ το αρχείο simplegit.rb εξακολουθεί να είναι εκτός του σταδίου καταχώρισης.
Αν τώρα θέλουμε να αποσύρουμε το αρχείο TODO από το στάδιο καταχώρισης, χρησιμοποιήσουμε την επιλογή 3
ή r
(συντομογραφία για revert):
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now> 3
staged unstaged path
1: +0/-1 nothing TODO
2: +1/-1 nothing index.html
3: unchanged +5/-1 lib/simplegit.rb
Revert>> 1
staged unstaged path
* 1: +0/-1 nothing TODO
2: +1/-1 nothing index.html
3: unchanged +5/-1 lib/simplegit.rb
Revert>> [enter]
reverted one path
Αν κοιτάξουμε πάλι την κατάσταση του Git, θα δούμε ότι το αρχείο TODO έχει αποσυρθεί από το στάδιο καταχώρισης:
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now> 1
staged unstaged path
1: unchanged +0/-1 TODO
2: +1/-1 nothing index.html
3: unchanged +5/-1 lib/simplegit.rb
Για να δούμε το diff των αρχείων που βρίσκονται στο στάδιο καταχώρισης, μπορούμε να χρησιμοποιήσουμε την εντολή 6
ή d
(συντομογραφία για το diff).
Μας παρουσιάζει τη λίστα με τα αρχεία του σταδίου καταχώρισης και μπορούμε να επιλέξουμε εκείνα των οποίων το diff θέλουμε να δούμε.
Αυτό μοιάζει πολύ με την git diff --cached
στη γραμμή εντολών:
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now> 6
staged unstaged path
1: +1/-1 nothing index.html
Review diff>> 1
diff --git a/index.html b/index.html
index 4d07108..4335f49 100644
--- a/index.html
+++ b/index.html
@@ -16,7 +16,7 @@ Date Finder
<p id="out">...</p>
-<div id="footer">contact : support@github.com</div>
+<div id="footer">contact : email.support@github.com</div>
<script type="text/javascript">
Με αυτές τις στοιχειώδεις εντολές, μπορούμε να χρησιμοποιήσουμε τη διαδραστική λειτουργία για να αλληλεπιδράσουμε με το στάδιο καταχώρισης λίγο πιο εύκολα.
Προσθήκη επιθεμάτων στο στάδιο καταχώρισης
Είναι επίσης δυνατό να προσθέσουμε στο στάδιο καταχώρισης κάποια τμήματα αρχείων και όχι τα υπόλοιπα.
Για παράδειγμα, αν κάνουμε δύο αλλαγές στο αρχείο simplegit.rb και θέλουμε να προσθέσουμε τη μία από αυτές αλλά όχι την άλλη, μπορούμε να το κάνουμε πολύ εύκολα.
Στο διαδραστικό περιβάλλον πληκτρολογούμεε 5
ή p
(συντομογραφία για patch).
Το Git θα μας ρωτήσει ποια αρχεία θα θέλαμε να προσθέσουμε μερικώς στο στάδιο καταχώρισης· τότε για κάθε τμήμα των επιλεγμένων αρχείων, θα εμφανιστούν τα κομμάτια του diff του αρχείου και θα μας ρωτά αν θα θέλουμε να τα προσθέσουμε στο στάδιο καταχώρισης, ένα ένα:
diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index dd5ecc4..57399e0 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -22,7 +22,7 @@ class SimpleGit
end
def log(treeish = 'master')
- command("git log -n 25 #{treeish}")
+ command("git log -n 30 #{treeish}")
end
def blame(path)
Stage this hunk [y,n,a,d,/,j,J,g,e,?]?
Έχουμε πολλές επιλογές σε αυτό το σημείο.
Αν πληκτρολογήσουμε ?
εμφανίζεται μια λίστα με ό,τι δυνατότητα έχουμε:
Stage this hunk [y,n,a,d,/,j,J,g,e,?]? ?
y - stage this hunk
n - do not stage this hunk
a - stage this and all the remaining hunks in the file
d - do not stage this hunk nor any of the remaining hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help
Γενικά, θα πρέπει να πληκτρολογούμε y
ή n
για κάθε τμήμα ανάλογα με το αν θέλουμε να το προσθέσουμε στο στάδιο καταχώρισης ή όχι αλλά η προσθήκη ή απόρριψη όλων των τμημάτων για κάποιο αρχείο είναι επίσης να είναι χρήσιμη.
Εάν θέλουμε να τοποθετήσουμε ένα τμήμα του αρχείου στο στάδιο καταχώρισης και αφήσουμε ένα άλλο τμήμα εκτός, η κατάστασή μας θα εμφανιστεί ως εξής:
What now> 1
staged unstaged path
1: unchanged +0/-1 TODO
2: +1/-1 nothing index.html
3: +1/-1 +4/-0 lib/simplegit.rb
Η κατάσταση του αρχείου simplegit.rb είναι ενδιαφέρουσα.
Σας δείχνει ότι μερικές γραμμές έχουν προστεθεί στο στάδιο καταχώρισης και κάποιες άλλες όχι.
Έχουμε προσθέσει αυτό το αρχείο μερικώς στο στάδιο καταχώρισης.
Σε αυτό το σημείο, μπορούμε να βγούμε από το διαδραστικό script και να εκτελέσουμε την git commit
για να υποβάλουμε τα μερικά σταδιακά αρχεία.
Επίσης, δεν χρειάζεται να είμαστε στο διαδραστικό περιβάλλον για να πραγματοποιήσουμε τη μερική προσθήκη στο στάδιο καταχώρισης —μπορούμε να ξεκινήσουμε το ίδιο script χρησιμοποιώντας την git add -p
ή git add --patch
στη γραμμή εντολών.
Επιπλέον, μπορούμε να χρησιμοποιήσουμε τη λειτουργία patch
για μερική επαναφορά των αρχείων με την εντολή reset --patch
, για ενημέρωση (checkout) τμημάτων των αρχείων με την εντολή checkout --patch
και για εναπόθεση (stashing) τμημάτων των αρχείων με την εντολή stash save --patch
.
Θα δούμε περισσότερες λεπτομέρειες για καθεμία από αυτές, όταν φτάσουμε σε πιο προηγμένες χρήσεις αυτών των εντολών.