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

Παιχνίδι 2048 σε C


johnny.tifosi

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

Μα σου ξαναλέω, εγώ δεν θέλω. Είναι αυτό που (υποθέτω) πρότεινε ο migf1.

 

Κι εγώ κάνω τον δικηγόρο του διαβόλου.

 

Και ναι, αν ήταν εντελώς ανεξάρτητα, όπως το σκέφτομαι, εγώ θα τα είχα σε διαφορετικά repos.

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

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

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

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

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

Μα σου ξαναλέω, εγώ δεν θέλω. Είναι αυτό που (υποθέτω) πρότεινε ο migf1.

Ναι εντάξει, εννοούσα θέλετε γενικά σαν project δεν εννοούσα εσένα.

 

Είθισται όταν δύο πράγματα είναι διαφορετικά να μπαίνουν σε διαφορετικά repo. Αν παρόλα αυτά όμως θέλεις/ετε να έχετε στο ίδιο repo δύο branches που θα αναπτύσσουν δύο διαφορετικά πράγματα και δεν θέλετε στο ένα να υπάρχουν τα αρχεία του άλλου, και αυτό γίνεται.

 

Όταν λέμε "commit" αυτό σημαίνει μια σειρά εννοιών. Μία από αυτές τις έννοιες είναι η "parent". Κάθε commit έχει (τουλάχιστον) ένα parent που δηλώνει μετά από ποιο commit είναι το συγκεκριμένο. Το πρώτο commit όμως (συνήθως λέγεται root commit), όπως καταλαβαίνουμε, δεν έχει κάποιο parent.

 

Γιατί το είπα τώρα αυτό ? Το git μας επιτρέπει να δημιουργήσουμε commits τα οποία να μην έχουν parent και έτσι ουσιαστικά να είναι και αυτά root commits. Αυτό επιτρέπει να έχουμε περισσότερες της μίας γραμμές ανάπτυξης χωρίς η μία να μπλέκει με την άλλη.

 

Εν προκειμένω λοιπόν για τον replayer έχουμε:

 

% git clone git://github.com/geomagas/2048cc.git
blah blah
% cd 2048cc.git
% git checkout --orphan gtk-replayer          [master]
Switched to a new branch 'gtk-replayer'
Δημιουργούμε ένα νέο branch όπως κάνουμε πάντα αλλά η παράμετρος orphan λέει στο git ότι το πρώτο commit που θα κάνουμε θέλουμε να μην έχει parents. Σε αυτό το σημείο το branch βρίσκεται στην ίδια κατάσταση που είναι το master οπότε αν τρέξουμε git status θα δούμε όλα τα αρχεία που έχει το master να αναφέρονται ως staged. Εμείς όμως δεν θέλουμε να έχουμε κανένα αρχείο του "κυρίου προγράμματος" οπότε θα τα σβήσουμε.

% git rm -rf .
% git status
# On branch gtk-replayer
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)
Η παραπάνω εντολή συνδυάζει το σβήσιμο των αρχείων από το filesystem με την αφαίρεση τους από το index και έτσι βλέπουμε την εικόνα που θα είχαμε αν μόλις είχαμε δημιουργήσει ένα νέο repo. Τώρα πρέπει να εισάγουμε τα αρχεία που θέλουμε τα οποία είναι τα αρχεία του replayer.

% git checkout origin/dev_gtk2_replayer gtk2_replayer/
% git commit -m "Added GTK Replayer"    [gtk-replayer]
[gtk-replayer (root-commit) b8b902e] Added GTK Replayer
Λέμε στο git να μας φέρει τον κατάλογο gtk2_replayer από το branch dev_gtk2_replayer και να μας το κάνει stage στο index. Επειδή η γραμμή ανάπτυξης είναι διαφορετική, θα μπορούσαμε για ομορφιά / ευκολία να καταργήσουμε τον κατάλογο gtk2_replayer και να βάλουμε τα αρχεία του χύμα. Έπειτα το κάνουμε commit και βλέπουμε ότι έχουμε ένα root commit.

% git log                               [gtk-replayer]
commit b8b902eb5c98a863eb8641305694f4c74bfb669c
Author:     imitheos <[email protected]>
AuthorDate: Fri Aug 8 18:32:44 2014 +0300
Commit:     imitheos <[email protected]>
CommitDate: Fri Aug 8 18:32:44 2014 +0300

    Added GTK Replayer
Η git-log μας εμφανίζει μόνο ένα commit στο συγκεκριμένο branch αντί για τα 100 commits που είχαμε μεχρι τώρα.

post-84828-0-99119500-1407512161_thumb.jpeg

Τρέχοντας gitk (με την παράμετρο --all για να δούμε όλα τα branches) παίρνουμε την παραπάνω εικόνα. Όπως βλέπουμε, το κυκλάκι του branch gtk-replayer δεν ενώνεται με τα υπόλοιπα που σημαίνει ότι είναι ξεχωριστή γραμμή ανάπτυξης.

 

Από εδώ και πέρα μπορούμε να κάνουμε push το branch στο github, να δημιουργήσουμε feature branches και να κάνουμε ό,τι κάναμε και στο master.

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

:blink: Wow!

 

Και αν κάποια στιγμή θέλουμε να τα κάνουμε merge, να υποθέσω ότι απλά συνενώνει όλα τα αρχεία;

 

Πάντως, αυτό είναι ουσιαστικά σαν να προσομοιώνεις πολλά repos σε ένα, δεν είναι έτσι;

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

:blink: Wow!

 

Και αν κάποια στιγμή θέλουμε να τα κάνουμε merge, να υποθέσω ότι απλά συνενώνει όλα τα αρχεία;

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

 

Πάντως, αυτό είναι ουσιαστικά σαν να προσομοιώνεις πολλά repos σε ένα, δεν είναι έτσι;

Είναι σαν να δουλεύεις σε ξεχωριστά repos χωρίς να χρειάζεσαι να κάνεις cd τάδε_κατάλογο, cd δείνα_κατάλογο. Η δόκιμη διαδικασία είναι να δουλέψεις σε ξεχωριστά repos αλλά υπάρχουν περιπτώσεις που έχεις κάτι που είναι τόσο άσχετο ώστε να μην το θέλεις μαζί με το src αλλά ταυτόχρονα τόσο σχετικό ώστε να μην το θέλεις σε διαφορετικό repo. Νομίζω με αυτό το τρόπο δούλευε παλαιότερα η τεκμηρίωση του git. Υπήρχε ένα branch στο οποίο γινόταν generate οι manpages και το οποίο ήταν ξεχωριστό από το source.
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Πανικός, οπότε δεν ήταν καλή ιδέα η πρότασή μου (πολύ μπλέξιμο, imho).

 

Καλύτερα να γίνουν αν είναι ξεχωριστά repos, μιας και μόλις τώρα ανακάλυψα τα git submodules (στο τέλος της σελίδας έχει και link προς την επίσημη τεκμηρίωση του git).

 

Με τα submodules μπορούμε λέει να κανουμε embed ξένα repos. Τώρα τι επιπρόσθετες επιπλοκές προστίθενται στην διαχείρισή τόσο του βασικού repo όσο και των embed ξένων δεν τα πολυκατάλαβα γιατί τα διάβασα στα πεταχτά, μου έδωσε όμως την εντύπωση πως πρέπει να είναι πιο απλό & ευέλικτο από τα orphan commits.

 

Εγώ προς το παρόν πάντως θα συνεχίσω να στέλνω τις αλλαγές του gtk2_replayer ως branch, όπως κάναμε μέχρι τώρα, γιατί νομίζω έχει προτεραιότητα να βάλω σχόλια στον κώδικα ώστε να μπορεί να περιηγείται σαν άνθρωπος όποιος το θελήσει. Μετά, βλέπουμε μήπως το κάνουμε είτε orphan είτε submodule.

 

Συμφωνείτε;

 

 

Αναβλήθηκε για 10 μέρες ακόμα η... φυγή μου από την Αθήνα για διακοπές :(

 

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

Με τα submodules μπορούμε λέει να κανουμε embed ξένα repos. Τώρα τι επιπρόσθετες επιπλοκές προστίθενται στην διαχείρισή τόσο του βασικού repo όσο και των embed ξένων δεν τα πολυκατάλαβα γιατί τα διάβασα στα πεταχτά, μου έδωσε όμως την εντύπωση πως πρέπει να είναι πιο απλό & ευέλικτο από τα orphan commits.

 

Εγώ προς το παρόν πάντως θα συνεχίσω να στέλνω τις αλλαγές του gtk2_replayer ως branch, όπως κάναμε μέχρι τώρα, γιατί νομίζω έχει προτεραιότητα να βάλω σχόλια στον κώδικα ώστε να μπορεί να περιηγείται σαν άνθρωπος όποιος το θελήσει. Μετά, βλέπουμε μήπως το κάνουμε είτε orphan είτε submodule.

 

Συμφωνείτε;

Μην μπλέκεις με submodules μέχρι να αποκτήσεις ευχέρεια με το git. Όταν αποκτήσεις την ευχέρεια και γίνεις πολύ καλός, μην μπλέξεις με submodules :)

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

Δεν ξέρω τι με έχει πιάσει, αλλά δεν έχω καθόλου διάθεση να γράψω κώδικα. Οπότε το έριξα στο... documentation :lol:

 

Έβαλα σχόλια στα gamedata.c & gamedata.h κι έγραψα κι ένα BROWSING.md αρχείο με πληροφορίες για το implementation των sources, καθώς και το coding-style που χρησιμοποιώ, Έκανα pull-request πριν από λίγο στον geomagas (μπορείτε να το δείτε και στο δικό μου fork).

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

Δεν μου πέφτει λόγος αλλά μήπως αφού κάνεις την περισσότερη ανάπτυξη θα ήταν καλύτερα να ήταν το "blessed" το δικό σου ?

 

Θετικά:

* Θα μειωθεί ο φόρτος και του geomagas αφού δεν θα χρειάζεται να κάνει merge 15 pull requests και ο δικός σου μια και δεν θα χρειάζεται να τραβάς συνέχεια το δικό του αφού κάνει το merge.

* Θα είναι πιο όμορφη η ιστορία χωρίς 35 pull requests

 

Αρνητικά:

* Μανούρα διαδικασία μια και (από όσο ξέρω) το github δεν έχει υλοποιήσει κάποιο κουμπί "reverse" οπότε ουσιαστικά θα πρέπει να σβηστεί το repo του geomagas ώστε να πάψει το δικό σου να θεωρείται fork (δεν θυμάμαι τι γίνεται οπότε ίσως χρειαστεί να σβηστεί και το δικό σου και να ξαναδημιουργηθεί και να γίνει push) και μετά να κάνει ο geomagas fork το δικό σου.

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

Αρνητικά:

* Μανούρα διαδικασία μια και (από όσο ξέρω) το github δεν έχει υλοποιήσει κάποιο κουμπί "reverse" οπότε ουσιαστικά θα πρέπει να σβηστεί το repo του geomagas ώστε να πάψει το δικό σου να θεωρείται fork (δεν θυμάμαι τι γίνεται οπότε ίσως χρειαστεί να σβηστεί και το δικό σου και να ξαναδημιουργηθεί και να γίνει push) και μετά να κάνει ο geomagas fork το δικό σου.

 

Υποστηρίζει όμως Transfer.

 

Σε κάθε περίπτωση, ακόμα και τώρα έχουμε πρακτικά την ίδια πρόσβαση, αφού ο migf1 έχει μπει στους collaborators, οπότε μόλις νιώσει αρκετά έτοιμος μπορεί να κάνει κατευθείαν push χωρίς να χρειάζεται να διατηρεί το δικό του fork. Και όταν νιώσει ακόμα πιο έτοιμος, κάνουμε και το transfer! :D

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

Υποστηρίζει όμως Transfer.

 

Σε κάθε περίπτωση, ακόμα και τώρα έχουμε πρακτικά την ίδια πρόσβαση, αφού ο migf1 έχει μπει στους collaborators, οπότε μόλις νιώσει αρκετά έτοιμος μπορεί να κάνει κατευθείαν push χωρίς να χρειάζεται να διατηρεί το δικό του fork. Και όταν νιώσει ακόμα πιο έτοιμος, κάνουμε και το transfer! :D

Σωστά. Δεν σκέφτηκα καθόλου το transfer και το γεγονός ότι είναι collaborator. Οπότε μπορεί να κάνει απλά push χωρίς να κάνετε πολύπλοκες διαδικασίες.

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

Μπορεί, αλλά ακόμα φοβάται μην τα κάνει μαντάρα :P

Ενώ τώρα, είτε εγώ κάνω καμιά λαλακία είτε ο geomagas, έχουμε μια έξτρα καβάτζα :)

 

Btw, έκανα ένα ακόμα pull-request με κάτι μικρο-αλλαγές στο gtk2_replayer/src/BROWSING.md

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

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

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

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

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

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

Σύνδεση

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

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

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