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

GIT και Tags μεσα στον κώδικα.


Dr.Fuzzy

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

Δημοσ.

Γρήγορη ερώτηση μήπως κάποιος γνωρίζει. Είπα να χρησιμοποιήσω το GIT για ένα μικρό project και ψάχνω να βρω πως γίνεται στο header του κώδικα (κάποιο keyword όπως στο CVS, π.χ., $Revision: $) να μπαίνουν αυτόματα τα Tags που χρησιμοποιώ για να ονομάζω τις versions, π.χ., v2.0 . :-)

 

---------- Προσθήκη 13-07-2010 στις 00:40 ---------- Προηγούμενο μήνυμα 12-07-2010 στις 17:00 ----------

 

ουδείς...;

Δημοσ.

Δεν έχω χρησιμοποιήσει το 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."

Δημοσ.
Δεν έχω χρησιμοποιήσει το 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!

Δημοσ.

@imitheos

 

Αντιλαμβάνομαι το πρόβλημα που δημιουργούν τα keywords, με τη βασική διαφορά ότι στο συγκεκριμένο μικρό project (άλλωστε είναι και ο λόγος που δεν το έβαλα στο remote CVS server που διατηρώ με μεγάλα projects) είμαι ο μοναδικός developer και δεν χρειάζομαι ούτε πρόκειται να δημιουργήσω branches. Ουσιαστικά θέλω απλά να κρατάω versions 1-2 codes στο laptop μου στις διακοπές χωρίς να χρειάζομαι δίκτυο (ο λόγος + το portability που στράφηκα προς GIT ή ίσως Mercurial). :-)

Δημοσ.
@imitheos

 

Αντιλαμβάνομαι το πρόβλημα που δημιουργούν τα keywords, με τη βασική διαφορά ότι στο συγκεκριμένο μικρό project (άλλωστε είναι και ο λόγος που δεν το έβαλα στο remote CVS server που διατηρώ με μεγάλα projects) είμαι ο μοναδικός developer και δεν χρειάζομαι ούτε πρόκειται να δημιουργήσω branches. Ουσιαστικά θέλω απλά να κρατάω versions 1-2 codes στο laptop μου στις διακοπές χωρίς να χρειάζομαι δίκτυο (ο λόγος + το portability που στράφηκα προς GIT ή ίσως Mercurial). :-)

 

Ναι το καταλαβαίνω. Ακόμη και να χρησιμοποιούσες branches είναι δικαίωμα σου

να θέλεις να χρησιμοποιήσεις keywords.

 

Στο προηγούμενο μήνυμα απλά εξήγησα στον Αλέξη ότι δεν απορρίφθηκε η επέκταση

λόγω καπρίτσιου του Torvalds αλλά λόγω του σχεδιασμού του git.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

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