Προς το περιεχόμενο

Ιδέες για project σε C


gon1332

Προτεινόμενες αναρτήσεις

Λοιπόν, το ανέβασα στα γρήγορα (ούτε ένα decent readme δεν έχω προλάβει να γράψω...).

 

Καλορίζικο!

Ωραίος. Αν θέλεις μπορείς να χρησιμοποιήσεις κάποιο shortener ώστε ο τίτλος να είναι πχ http://goo.gl/b0AZG5 αντί για όλο το μακρυνάρι του insomnia.

 

Επίσης στο τρίτο commit έχει βάλει επίτηδες τίτλο initial commit ? Αν όχι μπορείς να το αλλάξεις σε κάτι άλλο. Θεωρείται κακή πρακτική (και στο 95% των περιπτώσεων είναι) να αλλάζεις published history αλλά εν προκειμένω είναι νωρίς ακόμη και δεν νομίζω να το έχει κατεβάσει κανείς οπότε μπορείς να το αλλάξεις άφοβα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 138
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Συχνή συμμετοχή στο θέμα

Δημοσιευμένες Εικόνες

Ωραίος. Αν θέλεις μπορείς να χρησιμοποιήσεις κάποιο shortener ώστε ο τίτλος να είναι πχ http://goo.gl/b0AZG5 αντί για όλο το μακρυνάρι του insomnia.

Έχεις δίκιο σ' αυτό, θα το δω.

 

Επίσης στο τρίτο commit έχει βάλει επίτηδες τίτλο initial commit ? Αν όχι μπορείς να το αλλάξεις σε κάτι άλλο. Θεωρείται κακή πρακτική (και στο 95% των περιπτώσεων είναι) να αλλάζεις published history αλλά εν προκειμένω είναι νωρίς ακόμη και δεν νομίζω να το έχει κατεβάσει κανείς οπότε μπορείς να το αλλάξεις άφοβα.

Όλα έγιναν τόσο βιαστικά χθες...

 

Να σου πω τι έγινε. Πρώτα έφτιαξα το repo και μαζί το readme, οπότε έφτιαξε το πρώτο commit με τίτλο "Initial Commit". Μετά έκανα edit το readme, οπότε έκανε 2ο commit. Τέλος, ανέβασα τα αρχεία, και είχα τη φαεινή ιδέα να βάλω message "Initial Commit" μη έχοντας κατά νου ότι το πρώτο που έκανε αυτός το είχε κάνει label έτσι...

 

Ουσιαστικά δηλαδή, το τρίτο commit είναι το Initial. Πριν από αυτό δεν υπήρχε τίποτα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Όλα έγιναν τόσο βιαστικά χθες...

 

Να σου πω τι έγινε. Πρώτα έφτιαξα το repo και μαζί το readme, οπότε έφτιαξε το πρώτο commit με τίτλο "Initial Commit". Μετά έκανα edit το readme, οπότε έκανε 2ο commit. Τέλος, ανέβασα τα αρχεία, και είχα τη φαεινή ιδέα να βάλω message "Initial Commit" μη έχοντας κατά νου ότι το πρώτο που έκανε αυτός το είχε κάνει label έτσι...

 

Ουσιαστικά δηλαδή, το τρίτο commit είναι το Initial. Πριν από αυτό δεν υπήρχε τίποτα.

Το interface του github για file / commit editing είναι λίγο άθλιο (βασικά δεν θα έπρεπε καν να υπάρχει)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Thanks, ωραίος!

 

Το έκανα fork (https://github.com/migf1/2048) για να ανεβάζω τις αλλαγές που του κάνω και από εκεί θα σου κάνω pull requests.

 

Σου έκανα ήδη 2 pull-requests, με την έκδοση 3.0a2 η οποία:

- διορθώνει 2 bugs:
    α  )κανονικές κινήσεις μετά από undo δεν μηδένιζαν το redo
    β) αν φορτώναμε ένα replay-file με τερματισμένο νικηφόρο παιχνίδι και
       κατόπιν βγαίναμε από το replay-mode μας άφηνε να συνεχίσουμε να παίζουμε)

- έχει ανανεωμένα sample replay-files (η διόρθωση του bug β) με ανάγκασε
να προσθέσω άλλο ένα gamestate field, και να αλλάξει ελαφρώς και το format
των replay-files)

- Τυχόν διαθέσιμες κινήσεις για Redo εμφανίζονται πλέον στον
μετρητή κινήσεων με διαφορετικό χρώμα κι ένα + μπροστά τους.

- έχει διορθωμένο κι εμπλουτισμένο readme.txt
- έχει νέο 32μπιτο εκτελέσιμο για Windows
Πέρα τώρα από αυτά, αν είναι να ασχοληθούν κι άλλοι πείτε το παιδιά εδώ για να συντονιστούμε, και να δούμε πως θα καταφέρουμε να συγχρονίζουμε τα forks μας με το κεντρικό repo (αυτό δηλαδή στο account του geomagas... το blessed one).

 

Όποιος έχει ικανή εμπειρία με collaborated works στο github, ας κάνει ένα περιληπτικό ποστ με τρόπους που έχει χρησιμοποιήσει σε αντίστοιχες καταστάσεις και νομίζει πως θα μας διευκολύνουν κι εμάς. Thanks!

 

 

ΥΓ. Άσχετο, σήμερα ανακάλυψα πως το Github for Windows σταμάτησε να λειτουργεί με Windows XP (στον επιτραπέζιο έχω XP, και προφανώς δεν πρόκειται να τα αλλάξω σύντομα, αφού νεότερα λειτουργικά έχω στα laptops). Οπότε κατέβασα TortoiseGit και το πάλεψα από εκεί για να κάνω fork το blessed repo... άντε πάλι διάβασμα δηλαδή :P).

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Όποιος έχει ικανή εμπειρία με collaborated works στο github, ας κάνει ένα περιληπτικό ποστ με τρόπους που έχει χρησιμοποιήσει σε αντίστοιχες καταστάσεις και νομίζει πως θα μας διευκολύνουν κι εμάς. Thanks!

Ως τίτλο του commit βάζε μια περίληψη (είθισται όριο 50 χαρακτήρων) και αντί να έχει την version στο κάθε commit, κάνε tag το συγκεκριμένο commit που θεωρείς ότι χρειάζεται version bump.

 

Ένας τρόπος για να δουλέψεις από τους πολλούς είναι ο εξής:

 

1)

 

 

Πηγαίνεις στην url του repository στο οποίο θέλεις να συμμετέχεις

 

post-84828-0-59786600-1404929543_thumb.jpeg

 

και επιλέγεις το εικονίδιο fork δεξιά (είναι γκριζαρισμένο γιατί είχα κάνει κλικ με το ποντίκι). Βλέπουμε ότι ήδη έχει γίνει ένα fork (από τον migf1).

 

post-84828-0-41219900-1404929626_thumb.jpeg

 

Αυτόματα σε πετάει στη δική σου έκδοση του repository και βλέπουμε ότι έχει αυξηθεί ο αριθμός των fork σε 2.

 

Αν εγώ είχα κάνει clone τοπικά στον υπολογιστή μου το repo του geomagas θα μπορούσα να το κάνω upload στο github και θα φαινόταν σαν ξεχωριστό repo αλλά με τη μέθοδο του fork ευκολύνουμε το github και εμάς.

 

 

2)

 

 

Τώρα αυτό το repo είναι δικό μου. Το UI του github μου επιτρέπει να κάνω ένα νέο branch, να πειράξω αρχεία και γενικά να κάνω ό,τι θέλω. Επειδή εγώ θεωρώ το UI λίγο άθλιο και δεν με βολεύει θα κάνω τα πάντα τοπικά από το pc μου.

 

Για να γίνει αυτό πρέπει να κάνω clone τη δική μου έκδοση του repo.

% git clone https://github.com/imitheos/2048.git
Cloning into '2048'...
remote: Counting objects: 93, done.
remote: Compressing objects: 100% (66/66), done.
remote: Total 93 (delta 44), reused 74 (delta 25)
Unpacking objects: 100% (93/93), done.
Checking connectivity... done
Αυτό που πρέπει να κάνω αρχικά είναι να ενημερώσω το git τι στοιχεία να χρησιμοποιεί. Η συνήθης μέθοδος είναι να χρησιμοποιήσουμε την παράμετρο --global ώστε να ορίσουμε τα στοιχεία μας για όλα τα repos.

 

Το αρχείο μου gitconfig όμως περιέχει ήδη τα πραγματικά μου στοιχεία οπότε εγώ θα χρησιμοποιήσω την παράμετρο --local ώστε να οριστεί το Imitheos μόνο σε αυτό το repo.

 

% cd 2048 
% git config --local user.name Imitheos
% git config --local user.email [email protected]
% mv .git/hooks/pre-commit.sample .git/hooks/pre-commit
Η τελευταία εντολή ενεργοποιεί τον μανίσιο pre-commit hook ο οποίος ελέγχει για τυχόν trailing spaces που μπορεί να έχω ξεχάσει και με ενημερώνει πριν γίνει το commit ώστε να το διορθώσω.

 

Τώρα κάθε commit που θα κάνω θα έχει τα στοιχεία μου και είμαι έτοιμος να δουλέψω. Έτσι όπως είμαι τώρα όμως δεν μπορώ να παρακολουθώ τι κάνει ο geomagas για αυτό το λόγο θα προσθέσω τη δική του εκδοχή που είναι η blessed εκδοχή.

 

% git remote -f add upstream git://github.com/geomagas/2048.git
Σαν όνομα του repo συνήθως επιλέγεται το upstream αλλά θα μπορούσα να είχα βάλει geomagas ή οτιδήποτε άλλο ήθελα.

 

Τώρα είμαι έτοιμος και κάνω ό,τι αλλαγές θέλω. Δεν με εμποδίζει κανείς να δουλέψω στο master branch μου αλλά αυτό θα με δυσκολέψει όταν ο geomagas προσθέσει κάτι ή ακόμη και όταν κάνει merge την request μου. Για αυτό το λόγο είναι πιο εύκολο (και πιο δόκιμο σαν workflow) να δημιουργήσω ένα νέο branch.

 

% git checkout -b readme
Switched to a new branch 'readme'
Οι αλλαγές που θα κάνω είναι να ενσωματώσω το readme.txt του migf1 μέσα στο README.md ώστε να μην υπάρχουν δύο ίδια αρχεία. Κάνοντας τις αλλαγές και τρέχοντας git status παίρνω το εξής:

% git status                                      [readme U]
# On branch readme
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   README.md
#	deleted:    readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
Το git με ενημερώνει ότι έχω ένα αλλαγμένο και ένα διαγεγραμμένο αρχείο. Οι αλλαγές όμως αυτές δεν έχουν γίνει ακόμη stage. Επίσης μου λέει ότι μπορώ να τρέξω git add για να τις κάνω stage ή git checkout για να επαναφέρω τις εκδόσεις που υπάρχουν στο repo (χάνοντας έτσι τις αλλαγές μου)

 

% git add --all README.md readme.txt
% git status                                      [readme S]
# On branch readme
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	renamed:    readme.txt -> README.md
#
Η παράμετρος -all χρειάζεται από μία έκδοση του git και έπειτα ώστε να λάβει υπόψη της και την διαγραφή του αρχείου (κανονικά έπρεπε να τρέξω git rm ώστε να σβηστεί το αρχείο readme.txt αλλά εγώ από συνήθεια έσβησα το αρχείο χειροκίνητα από το filesystem οπότε έπρεπε να βάλω την -all για να ενημερώσω το git).

 

Οι αλλαγές που έκανα ήταν πολύ λίγες και έτσι το git αναγνώρισε ότι το μεγαλύτερο ποσοστό του αρχείου του migf1 είναι ίδιο και το εμφανίζει ως rename.

 

% git commit                                  [readme S]
README.md:34: trailing whitespace.
+How to compile the game 
README.md:89: trailing whitespace.
+the count of the current move. In case one or more Undo has been done, the 
README.md:135: trailing whitespace.
+saved, before attempting to load them from within the game. 
Προσπαθώντας να κάνω το commit παίρνω μήνυμα λάθους με αυτό που είπα πριν. Υπάρχουν spaces στο τέλος της γραμμής που είναι άσχημα οπότε δεν με αφήνει να κάνω commit και με ενημερώνει να τα σβήσω πρώτα.

% git status                                    [readme S U]
# On branch readme
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	renamed:    readme.txt -> README.md
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   README.md
#
Τρέχοντας git status παίρνω ένα παράξενο μήνυμα. Ενώ μου εμφανίζει το renamed μου εμφανίζει το ίδιο αρχείο και σαν modified. Αυτό έγινε γιατί υπάρχουν δύο σετ αλλαγών στο αρχείο. Μία είναι η αρχική ενσωμάτωση που την έκανα stage και φαίνεται με το renamed στο πρώτο κομμάτι και η άλλη αλλαγή είναι το σβήσιμο των περιττών space και αυτήν την αλλαγή δεν την έχω περάσει στο index ώστε να αποτελέσει μέρος του commit.

 

% git add --update                          [readme S U]
% git commit -m "Refactor README"             [readme S]
[readme c98725f] Refactor README
 1 file changed, 153 insertions(+), 160 deletions(-)
 rename readme.txt => README.md (80%)
Ενσωματώνω τις αλλαγές στο index (αντί να τρέξω git add README.MD έτρεξα git add --update το οποίο ενσωματώνει όσες αλλαγές έχουν αρχεία τα οποία ήδη παρακολουθώ στο git χωρίς να πειράζει νέα αρχεία) και μετά δημιουργώ το νέο commit με ένα απλό μήνυμα γιατί βαριόμουν :P

 

 

 

3)

 

 

Τελείωσα με τις διορθώσεις μου και το branch μου είναι έτοιμο. Υπό κανονικές συνθήκες θα έκανα merge το παρόν feature branch στο κεντρικό branch (είτε αυτό λέγεται master ή develop ή οπωσδήποτε αλλιώς) ώστε να φαίνονται τι αλλαγές έκανα και με ποιο σκοπό.

 

Εν προκειμένω όμως, αν το έκανα merge στο master και έστελνα pull request στον geomagas το master τότε θα είχα πάλι την ίδια δυσκολία που ανέφερα στην αρχή και δεν θα είχα κερδίσει τίποτα με το να δημιουργήσω το branch.

 

Θα με ευκολύνει αν το request το κάνω στο ξεχωριστό branch και το merge γίνει στο blessed repo του geomagas για αυτό θα ανεβάσω το branch μου ξεχωριστά σαν branch στο github.

 

% git branch                                    [readme]
  master
* readme
% git push origin                               [readme]
fatal: The current branch readme has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin readme
Βλέπω πως βρίσκομαι στο branch readme (έχει αριστερά αστερίσκο) και το κάνω push στο δικό μου repo που έχει όνομα origin. Παίρνω μήνυμα λάθους ότι στο συγκεκριμένο branch δεν έχει οριστεί κάποιο upstream branch. Πολύ σωστά γιατί το δημιούργησα τοπικά και το github δεν γνωρίζει τίποτα για το branch μου.

 

% git push origin readme                        [readme]
Username for 'https://github.com': imitheos
Password for 'https://[email protected]': 
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 2.92 KiB | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/imitheos/2048.git
 * [new branch]      readme -> readme
Έτσι τρέχω push αλλά του λέω explicitly ότι θέλω να στείλεις το readme branch (αν ήθελα να έχει άλλο όνομα στο github θα μπορούσα να γράψω readme:refactor-readme και θα είχε εκείνο το όνομα). Το branch μου δημιουργήθηκε σωστά το οποίο μπορώ να δω αν κάνω refresh τη σελίδα του github.

post-84828-0-70068200-1404932317_thumb.jpeg

 

post-84828-0-58036100-1404932404_thumb.jpeg

Κάνοντας κλικ πάνω στο readme με πάει σε εκείνο το branch και με ενημερώνει ότι βρίσκεται 1 commit μπροστά από το master.

 

 

 

4)

 

 

post-84828-0-99041600-1404932645_thumb.jpeg

Κάνω κλικ στο pull request για να ενημερωθεί με e-mail ο geomagas ότι έχω κάνει κάποιες αλλαγές στο repo του που αξίζει να τις δει.

post-84828-0-69444300-1404932690_thumb.jpeg

Ανοίγει το συγκεκριμένο παράθυρο στο οποίο μπορώ να αφήσω ένα σχόλιο στον geomagas και να του λέω πόσο καταπληκτικές είναι οι αλλαγές μου και δεν πρέπει με τίποτα να τις αφήσει χωρίς να τις κάνει merge :P

 

post-84828-0-97511800-1404933216_thumb.jpeg

 

post-84828-0-92872400-1404933240_thumb.jpeg

Όποιος επισκεφτεί το repo του geomagas βλέπει δεξιά πως έχει 1 ανοιχτή request και αν κάνει εκεί κλικ βλέπει ότι την έχω κάνει εγώ πριν 9 λεπτά χρησιμοποιώντας το branch readme και έχει τίτλο Refactor README.

 

Αν ο geomagas την κάνει merge θα γράψω τα επόμενα βήματα στα οποία θα φανεί πιο ξεκάθαρα τι κέρδισα χρησιμοποιώντας το ξεχωριστό branch αντί να δουλέψω στο master.

 

Edit: κάτι που ξέχασα να αναφέρω είναι πως να βλέπουμε τι αλλαγές έχουν τα διάφορα branches.

 

% git log master..origin/master
% git log origin/master..master
Η πρώτη εντολή θα μου εμφανίσει commits που περιέχει το branch origin/master (δηλαδή στο repo μου στο github) τα οποία δεν υπάρχουν στο τοπικό μου master. Φυσικά δεν εμφανίζει τίποτα γιατί μόνο εγώ δουλεύω στο repo οπότε δεν θα μπορούσε στο github να έχει κάτι.

 

Η δεύτερη εντολή κάνει το ανάποδο και εμφανίζει commits που υπάρχουν τοπικά στο pc μου χωρίς να υπάρχουν στο github. Και αυτή είναι κενή γιατί δεν έχω κάποια commits που να μην έχω κάνει push στο github.

 

% git log origin/readme..upstream/master
% git log upstream/master..origin/readme
commit c98725fb305235f9f2bd569c292349ffd47939a7
Author:     Imitheos <[email protected]>
AuthorDate: Wed Jul 9 21:45:49 2014 +0300
Commit:     Imitheos <[email protected]>
CommitDate: Wed Jul 9 21:45:49 2014 +0300

    Refactor README
Εδώ τρέχουμε το ίδιο αλλά με δύο άλλα branches. Η πρώτη εντολή εμφανίζει τα commits που έχει γράψει ο geomagas και δεν τα έχω ακόμη εγώ. Στις περισσότερες περιπτώσεις εδώ θα έχουμε πολλά commits απλά δεν πέρασε πολύ ώρα ακόμη από τότε που έκανα clone και ο geomagas δεν έγραψε κάτι οπότε βγαίνει κενή.

 

Η δεύτερη εντολή εμφανίζει τα commits που έχω γράψει εγώ και έχω κάνει push στο github και δεν υπάρχουν ακόμη στον geomagas. Σε αυτή τη περίπτωση δεν είναι κενή η έξοδος αλλά εμφανίζεται το commit που έκανα. Αν ο geomagas κάνει merge την request θα φαίνεται και αυτή η έξοδος κενή.

 

Edit2: Έγινε δεκτή η request οπότε ας ξαναδούμε την δεύτερη εντολή.

% git fetch upstream                            [readme]
remote: Counting objects: 1, done.
remote: Total 1 (delta 0), reused 1 (delta 0)
Unpacking objects: 100% (1/1), done.
From git://github.com/geomagas/2048
   c44184d..b1cc184  master     -> upstream/master
% git log upstream/master..origin/readme
Η εντολή δεν εμφανίζει τίποτα γιατί το commit μου πλέον υπάρχει στο master του geomagas.

 

 

 

5)

 

 

Ας δούμε τώρα τι κέρδισα χρησιμοποιώντας το ξεχωριστό branch.

 

Δουλεύω εγώ τοπικά και κάνω τις αλλαγές μου, πέρασαν οι μέρες και θέλω να ενσωματώσω τις αλλαγές που έκανε ο geomagas στο repo του.

% git checkout master                           [readme]
Switched to branch 'master'

% git merge upstream/master                     [master]
Updating c44184d..b1cc184
Fast-forward
 README.md  | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 readme.txt | 160 -------------------------------------------------------------
 2 files changed, 148 insertions(+), 164 deletions(-)
 delete mode 100644 readme.txt
Αλλάζω branch από εκείνο που δούλευα στο master και κάνω merge το repo του geomagas (πρώτα πρέπει να κάνω fetch που έκανα πριν ή να κάνω και τα δύο κατευθείαν με ένα βήμα τρέχοντας git pull).

 

Αν εγώ είχα πραγματοποιήσει αλλαγές στο master, το merge δεν θα ήταν fast forward και θα έπρεπε να επιλύσω τις διενέξεις που θα εμφανίζονταν. Επίσης θα δυσκόλευα τη δουλειά του geomagas.

 

Επειδή όμως δουλεύω σε ξεχωριστά branches και το master μου είναι καθαρό όλα έγιναν τζαμένια και δεν χρειάζομαι ούτε conflict resolution ούτε rebase ούτε τίποτα.

 

Ας δω τώρα αν δέχτηκε τις αλλαγές μου ο geomagas. Ας υποθέσουμε ότι δεν μπορώ να δω το site του github για να δω ότι έκλεισε η request. Πως θα δω αν πέρασε τις αλλαγές ?

 

% git log readme..upstream/master               [master]
commit b1cc1848f54ebfbcee10bd096563060741eeceb4
Merge: c44184d c98725f
Author:     geomagas <[email protected]>
AuthorDate: Wed Jul 9 22:12:20 2014 +0300
Commit:     geomagas <[email protected]>
CommitDate: Wed Jul 9 22:12:20 2014 +0300

    Merge pull request #3 from imitheos/readme
    
    Refactor README
% git log --no-merges readme..upstream/master   [master]
% git diff readme..upstream/master              [master]
Τρέχουμε πάλι το ίδιο που δείξαμε πριν. Θέλω να δω αν τα commits μου υπάρχουν στο repo του geomagas. Η πρώτη εντολή μου εμφανίζει το merge commit που ενημερώνει ότι έγινε δεκτή η request μου. Η δεύτερη εντολή αποκρύπτει τα merge commits οπότε βγαίνει κενή. Η τρίτη εντολή δείχνει αλλαγές σε επίπεδο αρχείων και βγαίνει και αυτή κενή.

 

% git br -d readme                              [master]
Deleted branch readme (was c98725f).

% git push origin :readme                       [master]
To https://github.com/imitheos/2048.git
 - [deleted]         readme
Το branch δε μου χρειάζεται πλέον και μπορώ να το σβήσω. Το μικρό -d ελέγχει αν τα commits που υπάρχουν στο branch έχουν γίνει merge στο τρέχον και μόνο τότε το σβήνει. Όπως βλέπουμε δεν εμφάνισε καμμία προειδοποίηση το οποίο είναι ακόμη ένα σημάδι ότι οι αλλαγές μου περάστηκαν στο master.

 

Έπειτα το σβήνω και από το github μου.

 

Αυτή η διαδικασία δουλεύω σε ξεχωριστό branch -> το κάνω push στο github -> ζητάω pull request σε αυτό και όχι στο master -> οι αλλαγές περνιούνται στο master του blessed repo -> οι αλλαγές κατά συνέπεια φτάνουν στο δικό μου master είναι από τις πιο εύκολες για τον maintainer και αυτή με τις λιγότερες εκπλήξεις.

 

 

Επεξ/σία από imitheos
  • Like 2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Πω πω πράμα! Thanks!

 

Θα το διαβάσω λεπτομερώς αύριο, γιατί τώρα ξεκινάει η Αργεντινη (οεοο)

 

Thanks again, θα το διαβάσω αύριο και θα επανέλθω με τυχόν απορίες.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Πω πω πράμα! Thanks!

 

Θα το διαβάσω λεπτομερώς αύριο, γιατί τώρα ξεκινάει η Αργεντινη (οεοο)

 

Thanks again, θα το διαβάσω αύριο και θα επανέλθω με τυχόν απορίες.

 

Κάνεις λάθος, η Ολλανδία ξεκινάει...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το παρόν repo είναι μικρό και χωρίς γρήγορη ανάπτυξη οπότε δεν φάνηκε αυτό που ήθελα να δείξω.

 

Πολλές φορές μπορούμε για τον ένα ή άλλο λόγο να κάνουμε rebase τη δουλειά μας. Εκεί που δουλεύω στο master και έχω 5-6 commits θέλω να κάνω fetch τη δουλειά του geomagas γιατί μου είπε ότι έχει βάλει μια πολύ ωραία υποδομή και θέλω να ελέγξω οπωσδήποτε αν αυτά που έχω κάνει παίζουν σωστά με τη νέα αυτή υποδομή.

 

Έτσι θα κάνω rebase τα commits μου πάνω στο νέο στιγμιότυπο του master branch. Τα commits μου θα πραγματοποιούν ακριβώς τις ίδιες αλλαγές και θα είναι έτσι ολόιδια ως προς το diff των αρχείων. Επειδή όμως θα έχουν γίνει rebase και πλέον θα έχουν άλλο parent (και άλλη ώρα) θα έχουν διαφορετικό αναγνωριστικό οπότε θα αντιμετωπίζονται σαν να ήταν διαφορετικά commits.

 

Μια άλλη περίπτωση είναι να βελτιώσει κάτι ο geomagas σε αυτά που έχω κάνει οπότε να αλλάξουν πάλι τα commits.

 

Το pull request όμως το είχα κάνει με τα παλιά commits οπότε όταν πάω να κάνω fetch ή pull θα μου εμφανιστεί πρόβλημα ότι δεν γίνεται fast forward και εγώ θα πρέπει να κάνω κάποια βήματα (πολύ εύκολα μεν αλλά βουνό για κάποιον που δεν έχει ευχέρεια με το git και θα αγχωθεί) για να επιλύσω την κατάσταση.

 

Στη περίπτωση που τα πάντα βρίσκονται σε ξεχωριστό branch, τότε δεν πάει να έχει αλλάξει το αναγνωριστικό των commits λόγω του rebase ? Δεν μας πειράζει τίποτα. Το master θα γίνει κανονικά fast forward λόγω ότι είναι καθαρό και μετά απλά θα έχω να ελέγξω αν έχουν περαστεί οι αλλαγές μου.

 

Το git diff είπαμε δουλεύει στο επίπεδο των περιεχομένων οπότε θα ελέγχει το master που περιέχει το commit X' με το branch μου που περιέχει το αρχικό μου commit X και δεν θα εμφανίσει τίποτα επειδή οι αλλαγές μου είναι αυτούσιες άσχετα αν τα commits έχουν αλλάξει λόγω του rebase. Έτσι θα καταλάβω ότι ασχέτως διαφορετικών commits οι αλλαγές μου περάστηκαν σωστά και απλά σβήνω το τοπικό branch με git branch -D και έχω τελειώσει.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ωραίος ο imitheos!

 

Λίγο με το πλεονέκτημα του branching το έχασα, αλλά μάλλον είναι επειδή θέλω διάβασμα.

 

Τα 2 commits που έκανα εγώ μέχρι στιγμής ήταν στο origin/master, οπότε ως master ήταν και το pull request μου. Και είχα σκοπό να κάνω pull το blessed/master τοπικά (π.χ. για να τραβήξω τα δικά σου commits). Να μην το κάνω έτσι δηλαδή;

 

Κάθε μου αλλαγή να την κάνω σε νέο branch δηλαδή;

 

ΥΓ1. Τελικά είναι σίγουρο πως όλο αυτό το overhead δεν θα αποθαρρύνει παιδιά που θα ήθελαν να συμμετάσχουν; :P Πλάκα κάνω, από τη στιγμή που ασχολούμαστε πάνω από ένας, δεν γίνεται χωρίς vcs. Πρέπει όμως να οργανωθούμε!

 

ΥΓ2. Btw, ένα πολύ συνοπτικό guide για ναυτιλλομένους για χρήση του TortoiseGit σε Windows.

 

 

@Lanike71: Δεν έκανα λάθος, η Αργεντινή ξεκινούσε :P

 

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

@geomagas:

 

Δεν υπάρχει ανεβασμένο το εκτελέσιμο (btw, όταν ευκαιρήσεις κάνε και τον τίτλο του project "2048cc" ή "2048 Console Clone"... μην νομίζουν πως είμαστε οι αυθεντικοί :P ... δεν θα χάσει τα forks το renaming, έτσι δεν είναι; ).

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Τα 2 commits που έκανα εγώ μέχρι στιγμής ήταν στο origin/master, οπότε ως master ήταν και το pull request μου. Και είχα σκοπό να κάνω pull το blessed/master τοπικά (π.χ. για να τραβήξω τα δικά σου commits). Να μην το κάνω έτσι δηλαδή;

 

Κάθε μου αλλαγή να την κάνω σε νέο branch δηλαδή;

Όπως είναι γνωστό, there are many ways to skin a cat. Γενική πρόταση "θα το κάνεις πάντα έτσι" δεν μπορεί να υπάρξει γιατί υπάρχουν περιπτώσεις και περιπτώσεις. Όπως είδες δεν προέκυψε κανένα πρόβλημα με το να δουλέψεις στο master branch (και στο συγκεκριμένο repo δεν νομίζω να υπάρξει ποτέ).

 

Λίγο με το πλεονέκτημα του branching το έχασα, αλλά μάλλον είναι επειδή θέλω διάβασμα.

Κάνω εγώ clone το repo του geomagas. Η οπτικοποίηση του repo τη στιγμή που το κάνω clone είναι η παρακάτω:

post-84828-0-23625300-1404982163_thumb.jpeg

Ο geomagas έχει κάνει merge τις δύο προσθήκες σου και το repo έχει αυτή τη μορφή.

 

Αρχίζω εγώ και δουλεύω στο master branch και γράφω το commit που είχα γράψει με τίτλο "Refactor README" και του κάνω pull request.

 

Όσο περιμένω να την δεχτεί, για τον Χ-Ψ λόγο κάνω rebase τα commit μου. Κάποιος θα επιχειρηματολογήσει ότι το rebase είναι κακή πρακτική αλλά σκέψου ότι ο geomagas μπορεί να κάνει κάποιες αλλαγές στα commit μου και να κάνει merge εκείνα που προκύπτουν ή 10 άλλοι λόγοι για τους οποίους μπορεί να αλλάξει το commit. Ή μπορεί να αρχίσω να δουλεύω κάτι άλλο και να έχω προσθέσει άλλα 15 commits μέχρι να γίνει το merge από τον geomaga.

 

Έπειτα ο geomagas δέχεται τη request και οι αλλαγές μου υπάρχουν πλέον στο repo του.

 

Τι υπάρχει στο δικό μου repo τώρα ?

% git log origin/master..master                 [master]
commit b1054f16f2a0149d6ea261b18550012c7ab91ea0
Commit:     Imitheos <[email protected]>
CommitDate: Thu Jul 10 11:44:24 2014 +0300

    Refactor README
Όπως βλέπεις, το git μου εμφανίζει ότι το repo μου περιέχει ένα commit που δεν υπάρχει στο blessed ενώ στην πραγματικότητα υπάρχει. Αυτό έγινε γιατί το αρχικό commit είχε αναγνωριστικό c98725fb και ημερομηνία 09/07/2014 21:45:49 ενώ το νέο commit έχει αναγνωριστικό b1054f16 και ημερομηνία 10/07/2014 11:44:24.

post-84828-0-27581600-1404982505_thumb.jpeg

Εδώ βλέπουμε και πάλι την οπτικοποίηση του repo. Βλέπεις ότι το commit μου εμφανίζεται δύο φορές. Ας δούμε τώρα τι θα γίνει όταν κάνω merge (ή pull) τις αλλαγές του geomagas.

 

post-84828-0-15522800-1404982668_thumb.jpeg

Όπως βλέπεις δημιούργησε ένα merge commit για να ενώσει τις αλλαγές μου με τις αλλαγές του geomagas (που ουσιαστικά είναι οι δικές μου). Η παρούσα περίπτωση είναι πολύ απλή και έτσι δεν έχουμε προβλήματα απλά "ασχημαίνουμε" την ιστορία του project αλλά σε πιο πολύπλοκες αλλαγές θα μπορούσαμε να είχαμε διενέξεις και λοιπά.

 

Κάποιος που έχει μια άλφα εμπειρία δεν θα πάει να κάνει χύμα merge εφόσον ξέρει ότι έχει κάνει rebase αλλά θα ακολουθήσει τη δόκιμη διαδικασία (αν και ο παράγοντας κούραση κάνει και τους έμπειρους να κάνουν χαζομάρες).

 

Αυτό το "πρόβλημα" θα μπορούσε να αποφευχθεί ρυθμίζοντας το git να χρησιμοποιεί πάντα rebase κατά το pull αντί για merge αλλά αυτό εισάγει πολλά περισσότερα προβλήματα για κάποιο άπειρο για αυτό το λόγο πρότεινα την ανάπτυξη σε ξεχωριστό feature branch σαν μια καλή πρακτική.

 

Από εκεί και πέρα εσύ κρίνεις τι χρειάζεται branch και τι όχι. Αλλαγές όπως οι δικές μας που ήταν ένα μόνο commit με απλές αλλαγές δεν χρειάζονται branch.

 

Ας δούμε τώρα το ίδιο ακριβώς θέμα αλλά δουλεύοντας με branch.

post-84828-0-83962800-1404984058_thumb.jpeg

Το master μου βρίσκεται στις δικές σου αλλαγές, το master του geomagas έχει δύο νέα commit που είναι η αποδοχή της request μου και το δικό μου branch refreadme έχει ένα commit. Και πάλι το commit θεωρείται διαφορετικό και εμφανίζεται δύο φορές αλλά αυτή τη φορά δεν μας εμποδίζει το master.

 

Από εκεί που δούλευα στο refreadme ας μετακινηθώ στο master για να ενσωματώσω τις αλλαγές του geomaga.

% git co master                              [refreadme]
Switched to branch 'master'
Your branch is behind 'origin/master' by 2 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)
Παίρνω ενημέρωση ότι το master μου είναι πίσω κατά 2 commits από το blessed αλλά επειδή δεν το έχω "μολύνει" μπορεί να γίνει fast-forward.

% git merge origin/master                       [master]
Updating c44184d..b1cc184
Fast-forward
 README.md  | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 readme.txt | 160 -------------------------------------------------------------
 2 files changed, 148 insertions(+), 164 deletions(-)
 delete mode 100644 readme.txt
post-84828-0-98227900-1404984361_thumb.jpeg

Ο δείκτης (που ουσιαστικά είναι ένα branch) προχώρησε απλά κατά 2 commits χωρίς να χρειαστεί ούτε merge commit ούτε τίποτα.

 

% git co refreadme                              [master]
Switched to branch 'refreadme'
% git rebase master                          [refreadme]
First, rewinding head to replay your work on top of it...
post-84828-0-77813700-1404984645_thumb.jpeg

Το merge απλά ενώνει δύο γραμμές ανάπτυξης ενώ το rebase είναι πιο δυνατό και δουλεύει με το περιεχόμενο. Κάνοντας rebase το branch μου, βλέπει ότι το νέο commit ουσιαστικά υπάρχει ήδη και το πετάει σαν να μην είχε γίνει ποτέ.

 

Όπως βλέπεις το refreadme τώρα δείχνει ακριβώς όπου και τα άλλα και το δεύτερο ίδιο commit έχει εξαφανιστεί. Τώρα σβήνω απλά το branch και τέλος.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

@geomagas:

 

Δεν υπάρχει ανεβασμένο το εκτελέσιμο

Ναι, κάποιος το διέγραψε με ένα pull request! :P

 

(btw, όταν ευκαιρήσεις κάνε και τον τίτλο του project "2048cc" ή "2048 Console Clone"... μην νομίζουν πως είμαστε οι αυθεντικοί :P ... δεν θα χάσει τα forks το renaming, έτσι δεν είναι; ).

Δεν νομίζω να χάσει τα forks, θα ήταν πολύ κουλό. Αλλά μήπως να μην το πούμε έτσι; Αν στο μέλλον σταματήσει να είναι αποκλειστικά console, θα το ξαναλλάζουμε;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...