Dr.Fuzzy Δημοσ. 13 Ιουλίου 2010 Δημοσ. 13 Ιουλίου 2010 Γρήγορη ερώτηση μήπως κάποιος γνωρίζει. Είπα να χρησιμοποιήσω το GIT για ένα μικρό project και ψάχνω να βρω πως γίνεται στο header του κώδικα (κάποιο keyword όπως στο CVS, π.χ., $Revision: $) να μπαίνουν αυτόματα τα Tags που χρησιμοποιώ για να ονομάζω τις versions, π.χ., v2.0 . ---------- Προσθήκη 13-07-2010 στις 00:40 ---------- Προηγούμενο μήνυμα 12-07-2010 στις 17:00 ---------- ουδείς...;
alex2005 Δημοσ. 13 Ιουλίου 2010 Δημοσ. 13 Ιουλίου 2010 Δεν έχω χρησιμοποιήσει το git αρκετά έτσι ώστε να σου δώσω απάντηση σε αυτό. Με γρήγορη αναζήτηση στο google πάντως βρήκα πως μάλλον το GIT δεν υποστηρίζει κάτι τέτοιο. Μάλλον ο κύριος Linus προσπαθεί πάλι να το παίξει εξυπνάκιας και να απαξιώσει ότι όλοι οι devs κάνουν για χρόνια Quote από Linus Torvalds: "The whole notion of keyword substitution is just totally idiotic. It's trivial to do "outside" of the actual content tracking, if you want to have it when doing release trees as tar-balls etc."
Dr.Fuzzy Δημοσ. 13 Ιουλίου 2010 Μέλος Δημοσ. 13 Ιουλίου 2010 Ναι δυστυχώς το βρήκα και εγώ αυτό...Τhanx πάντως. Ίσως να δοκιμάσω το Mercurial αν το υποστηρίζει.
imitheos Δημοσ. 13 Ιουλίου 2010 Δημοσ. 13 Ιουλίου 2010 Δεν έχω χρησιμοποιήσει το git αρκετά έτσι ώστε να σου δώσω απάντηση σε αυτό. Με γρήγορη αναζήτηση στο google πάντως βρήκα πως μάλλον το GIT δεν υποστηρίζει κάτι τέτοιο. Μάλλον ο κύριος Linus προσπαθεί πάλι να το παίξει εξυπνάκιας και να απαξιώσει ότι όλοι οι devs κάνουν για χρόνια Ο Torvalds μπορεί να είναι ισχυρογνώμων και να επιμένει σε πολλά αλλά εδώ δεν το κάνει για να το παίξει εξυπνάκιας όπως λες. Το git φτιάχτηκε με τη σκέψη της χρήσης πολλών branches, κάτι που στα CVS,SVN δεν υπήρχε (το branch ουσιαστικά ήταν αντιγραφή όλου του tree). Ο έλεγχος των αρχείων γίνεται με βάση το SHA1 του περιεχομένου, οπότε τα keywords δημιουργούν κάποια προβλήματα. π.χ Έχεις 2 branches με ονόματα, Β1, Β2 Στην αρχή και τα δύο branches βρίσκονται στην κατάσταση Κ. Βάζοντας 9 patch στο B1, έρχεται στην κατάσταση Λ. Στο Β2 βάζεις 13 patch τα οποία όμως έχουν τις ίδιες αλλαγές και έτσι έρχεσαι πάλι στην κατάσταση Λ. Επειδή ο έλεγχος γίνεται με βάση το περιέχομενο, και τα δύο branch έχουν την ίδια κατάσταση, οπότε ένα git diff B1..B2 θα σου δείξει μηδέν αλλαγές, και το checkout του κάθε branch θα γίνεται αστραπιαία γιατί δεν θα πειραχτεί κανένα αρχείο. Όταν όμως χρησιμοποιείς keywords. πχ Revision, τότε τα αρχεία του B1 θα έχουν Revision π.χ 30 που ήταν αρχικά + 9 = 39, ενώ του B2, θα έχουν Revision 43. Οπότε, γενικά χαλάνε πολλά. Μια πρόταση που είχε γίνει ήταν να αγνοεί το git diff τα keywords, τότε όμως το diff που προκύπτει δεν θα γινόταν apply με το συμβατικό πρόγραμμα patch αλλά μόνο με το git apply. Αν πρέπει οπωσδήποτε να γίνει, μπορείς να χρησιμοποιήσεις είτε το αρχείο .gitattributes δημιουργώντας κάποια φίλτρα όπως φαίνεται εδώ http://kerneltrap.org/mailarchive/git/2007/10/12/336373 ή να δημιουργήσεις hooks Edit: Δες και τι λένε στο Mercurial http://mercurial.selenic.com/wiki/KeywordPlan Keyword expansion is not supported in the core of Mercurial because it's of limited utility in a modern system and it's problematic from performance and binary integrity standpoints. For most human uses, one can simply ask the revision control system. And for situations where the revision control system is not available, the tag is very likely to be incorrect!
Dr.Fuzzy Δημοσ. 13 Ιουλίου 2010 Μέλος Δημοσ. 13 Ιουλίου 2010 @imitheos Αντιλαμβάνομαι το πρόβλημα που δημιουργούν τα keywords, με τη βασική διαφορά ότι στο συγκεκριμένο μικρό project (άλλωστε είναι και ο λόγος που δεν το έβαλα στο remote CVS server που διατηρώ με μεγάλα projects) είμαι ο μοναδικός developer και δεν χρειάζομαι ούτε πρόκειται να δημιουργήσω branches. Ουσιαστικά θέλω απλά να κρατάω versions 1-2 codes στο laptop μου στις διακοπές χωρίς να χρειάζομαι δίκτυο (ο λόγος + το portability που στράφηκα προς GIT ή ίσως Mercurial).
imitheos Δημοσ. 13 Ιουλίου 2010 Δημοσ. 13 Ιουλίου 2010 @imitheos Αντιλαμβάνομαι το πρόβλημα που δημιουργούν τα keywords, με τη βασική διαφορά ότι στο συγκεκριμένο μικρό project (άλλωστε είναι και ο λόγος που δεν το έβαλα στο remote CVS server που διατηρώ με μεγάλα projects) είμαι ο μοναδικός developer και δεν χρειάζομαι ούτε πρόκειται να δημιουργήσω branches. Ουσιαστικά θέλω απλά να κρατάω versions 1-2 codes στο laptop μου στις διακοπές χωρίς να χρειάζομαι δίκτυο (ο λόγος + το portability που στράφηκα προς GIT ή ίσως Mercurial). Ναι το καταλαβαίνω. Ακόμη και να χρησιμοποιούσες branches είναι δικαίωμα σου να θέλεις να χρησιμοποιήσεις keywords. Στο προηγούμενο μήνυμα απλά εξήγησα στον Αλέξη ότι δεν απορρίφθηκε η επέκταση λόγω καπρίτσιου του Torvalds αλλά λόγω του σχεδιασμού του git.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.