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

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

Δημοσ.

Λοιπόν παιδιά έχω το εξής θέμα με το Bitbucket.

Έκανα κάποιες αλλαγές στο local repo μου (για την ακρίβεια διόρθωσα και έκανα squash κάποια commit messages με git rebase -i). Eνώ το git log μου επιστρέφει σωστά τις ημερομηνίες των commit, όταν κάνω git push --all -f για να γίνει update το remote (Bitbucket) τα commits παίρνουν την τρέχουσα ημερομηνία που έγινε το push! Έχει ιδέα κανένας γιατί συμβαίνει αυτό και πως μπορώ να το διορθώσω;

Δημοσ.

Δεν είμαι σίγουρος τι περιγράφεις, αλλά ίσως απλά το BB δείχνει το committer date, ενώ το author date παραμένει το "σωστό";

 

Κάνε git log --pretty=fuller (απλά πολύ εύκολος τρόπος να δεις και τα δύο dates) για να επιβεβαιώσεις, στην οποία περίπτωση απλά έχεις να κάνεις με αποφάσεις του UI του BB και αν θες τόσο πολύ να το διορθώσεις προφανώς πρέπει να δώσεις το committer date manually, αν και αυτό θεωρείται καγκουριά εκτός πολύ πολύ ειδικών περιπτώσεων.

  • Like 1
Δημοσ.

Αυτό ακριβώς που λες περιγράφω! Καγκουριά ξε καγκουριά θέλω το committer date να είναι ίδιο με το author date. Ναι το ΒΒ δείχνει το committer date και όχι το author date (δε ξέρω γιατί και απ' ότι βλέπω υπάρχει open feature request από το 2015) πράγμα το οποίο μου καταστρέφει εντελώς το history flow!

Δημοσ.

Eνώ το git log μου επιστρέφει σωστά τις ημερομηνίες των commit, όταν κάνω git push --all -f για να γίνει update το remote (Bitbucket) τα commits παίρνουν την τρέχουσα ημερομηνία που έγινε το push! Έχει ιδέα κανένας γιατί συμβαίνει αυτό και πως μπορώ να το διορθώσω;

Δεν είμαι σίγουρος τι περιγράφεις, αλλά ίσως απλά το BB δείχνει το committer date, ενώ το author date παραμένει το "σωστό";

 

Κάνε git log --pretty=fuller (απλά πολύ εύκολος τρόπος να δεις και τα δύο dates) για να επιβεβαιώσεις, στην οποία περίπτωση απλά έχεις να κάνεις με αποφάσεις του UI του BB και αν θες τόσο πολύ να το διορθώσεις προφανώς πρέπει να δώσεις το committer date manually, αν και αυτό θεωρείται καγκουριά εκτός πολύ πολύ ειδικών περιπτώσεων.

Αυτό ακριβώς που λες περιγράφω! Καγκουριά ξε καγκουριά θέλω το committer date να είναι ίδιο με το author date. Ναι το ΒΒ δείχνει το committer date και όχι το author date (δε ξέρω γιατί και απ' ότι βλέπω υπάρχει open feature request από το 2015) πράγμα το οποίο μου καταστρέφει εντελώς το history flow!

Αν το δούμε τυπικά, όσον αφορά την ιστορία ενός αποθετηρίου, αυτό που μετράει είναι πότε έγινε το commit και όχι πότε το έγραψε ο Author οπότε σωστά δείχνει την Committer Date.

 

Αν θέλεις να το αλλάξεις (και μια και δεν σε πειράζει να κάνεις force push), μπορείς να κάνεις κάτι σαν το παρακάτω:

% git format-patch SHA1-Hash
% git reset --hard SHA1-Hash
% git am --committer-date-is-author-date 0*patch
Όπου SHA1 θα βάλεις το id του προηγούμενου commit από το πρώτο που θέλεις να αλλάξεις (το ίδιο δηλαδή που έβαλες και στην rebase). Το format-patch θα σου δημιουργήσει Ν αρχεία .patch όσα είναι τα commits. Έπειτα με reset --hard θα φέρεις το repo σου στην τότε κατάσταση σαν να μην είχες κάνει ποτέ τα νέα commits (πρόσεξε να μην έχεις αλλαγές που δεν έχεις κάνει commit) και το git-am θα σου περάσει τα patches αλλά θα έχει ως ημερομηνία την author-date.

 

Μετά κάνεις ξανά force push στο BB

  • Like 2
Δημοσ.

Αν το δούμε τυπικά, όσον αφορά την ιστορία ενός αποθετηρίου, αυτό που μετράει είναι πότε έγινε το commit και όχι πότε το έγραψε ο Author οπότε σωστά δείχνει την Committer Date.

 

Αν θέλεις να το αλλάξεις (και μια και δεν σε πειράζει να κάνεις force push), μπορείς να κάνεις κάτι σαν το παρακάτω:

% git format-patch SHA1-Hash
% git reset --hard SHA1-Hash
% git am --committer-date-is-author-date 0*patch
Όπου SHA1 θα βάλεις το id του προηγούμενου commit από το πρώτο που θέλεις να αλλάξεις (το ίδιο δηλαδή που έβαλες και στην rebase). Το format-patch θα σου δημιουργήσει Ν αρχεία .patch όσα είναι τα commits. Έπειτα με reset --hard θα φέρεις το repo σου στην τότε κατάσταση σαν να μην είχες κάνει ποτέ τα νέα commits (πρόσεξε να μην έχεις αλλαγές που δεν έχεις κάνει commit) και το git-am θα σου περάσει τα patches αλλά θα έχει ως ημερομηνία την author-date.

 

Μετά κάνεις ξανά force push στο BB

 

 

Έστω ότι έχω 4 commits, τα α, β, γ, δ με δ το νεότερο. Βάζοντας το SHA1-Hash του α θα δημιουργηθούν patches για τα β, γ, δ. Πώς μπορώ να κάνω committer-date-is-author-date μόνο στα β, γ χωρίς το δ; Δοκίμασα με git format-patch -1 SΗΑ1-Hash για να κάνω patch σε συγκεκριμένα commits αλλά κάτι χάνω μετά στο reset και δε μου βγήκε. 

Δημοσ.

Έστω ότι έχω 4 commits, τα α, β, γ, δ με δ το νεότερο. Βάζοντας το SHA1-Hash του α θα δημιουργηθούν patches για τα β, γ, δ. Πώς μπορώ να κάνω committer-date-is-author-date μόνο στα β, γ χωρίς το δ; Δοκίμασα με git format-patch -1 SΗΑ1-Hash για να κάνω patch σε συγκεκριμένα commits αλλά κάτι χάνω μετά στο reset και δε μου βγήκε.

Το git-am παίρνει όσα ορίσματα θέλεις. Μπορείς να γράψεις git am --co-...date β γ και θα στα περάσει αυτά με την παλιά ημερομηνία.

 

Δεν κατάλαβα τι θέλεις να κάνεις με το δ όμως. Θέλεις να έχει την τρέχουσα ημερομηνία σαν commit date ? Αν ναι τρέχεις git-am χωρίς την παράμετρο. Δηλαδή απλά "git am δ" και θα έχει την σημερινή ημερομηνία. Αν θέλεις να το παραλείψεις εντελώς και να μην υπάρχει σαν commit, τότε απλά δεν τρέχεις την git-am για το δ και το repo σου θα τελειώνει στο γ.

 

Επίσης μην ξεχνάς το reflog με το οποίο μπορείς να αναιρέσεις οποιαδήποτε αλλαγή έχεις κάνει.

Δημοσ.

Οχι, θέλω απλά τα α και δ cοmmits να μείνουν ως έχουν και να κάνω την αλλαγή (AuthorDate=CommitDate) μόνο στα β, γ commits.

Δημοσ.

Οχι, θέλω απλά τα α και δ cοmmits να μείνουν ως έχουν και να κάνω την αλλαγή (AuthorDate=CommitDate) μόνο στα β, γ commits.

Το α εφόσον δεν θα το πειράξεις θα μείνει ίδιο. Το δ όμως θα αλλάξει id. Ένα commit εκτός από το tree και την ημερομηνία, εμπεριέχει και το parent commit οπότε εφόσον τα commit id των β, γ θα αλλάξουν, αναγκαστικά θα αλλάξει id και το δ.

Δημοσ.

To α δε θα αλλάξει εφόσον βάζω ένα SHA-hash πρίν, ΟΚ κατανοητό. To δ γιατί σόνι και ντε πρέπει να γίνει AuthorDate=CommitDate υποχρεωτικά μαζί με τα β και γ, αυτό δεν έχω καταλάβει!

Δημοσ.

To α δε θα αλλάξει εφόσον βάζω ένα SHA-hash πρίν, ΟΚ κατανοητό. To δ γιατί σόνι και ντε πρέπει να γίνει AuthorDate=CommitDate υποχρεωτικά μαζί με τα β και γ, αυτό δεν έχω καταλάβει!

Μάλλον δεν κατάλαβα εγώ καλά τι θέλεις να κάνεις. Απαραίτητο να γίνει ADate == CDate εννοείται πως δεν είναι. Ό,τι ημερομηνία θέλεις εσύ μπορείς να βάλεις. Εγώ αυτό που είπα ήτανε για το commit hash. Εφόσον τα β,γ θα αλλάξουν και θα γίνουν β', γ', και εφόσον το δ έχει ως parent το γ (πλέον το γ') αναγκαστικά θα αλλάξει hash και αυτό.

Δημοσ.

ΟΚ, ναι τα hash λογικό είναι να αλλάξουν, νόμιζα ότι εννοούσες οτι θα γίνουν ADate == CDate τα β, γ, δ υποχρεωτικά.

 

΄Ενα άλλο θέμα που έχω είναι με τα newlines όταν κάνω git am x_patch, δηλαδή έστω το παρακάτω commit με πχ, commit messages:

 

    Implement blah blah
    Implement blah blah
    Add option to blah blah
    Update README
 
μετά το git am x_patch τα commit messages χανουν τα newlines και γίνονται:
 
Implement blah blah Implement blah blah Add option to blah blah Update README
Δημοσ.

΄Ενα άλλο θέμα που έχω είναι με τα newlines όταν κάνω git am x_patch, δηλαδή έστω το παρακάτω commit με πχ, commit messages:

 

μετά το git am x_patch τα commit messages χανουν τα newlines και γίνονται:

Δεν μου έχει τύχει ποτέ αυτό. Δημιούργησα τώρα ένα τεστ repo και το δοκίμασα και παίζει κανονικά. Αλλά το δοκιμάζω σε linux οπότε ίσως κάτι να γίνεται με τα CR-LF. Λογικά αν υπήρχε θέμα με τα newlines δεν θα σου έπαιζε σωστά και το patch και όχι να χαλάει μόνο το commit message αλλά ποτέ δεν ξέρεις.

 

Βλέπω ότι το git-am έχει μια επιλογή που λέγεται keep-cr οπότε δοκίμασε την μήπως με αυτήν παίζει σωστά και δεν στο χαλάει. Αν έχεις windows και περιμένουν να βρουν το CR αλλά το git το κόβει και αφήνει μόνο το LF ίσως να δικαιολογείται αυτό που τα βλέπεις σε μία γραμμή.

 

Παλιά θυμάμαι παίζαμε με την επιλογή core.eol ή κάπως έτσι αλλά υποτίθεται εδώ και χρόνια έχει λυθεί αυτό το μπάχαλο και το git αναγνωρίζει αυτόματα τις newlines και παίζει από την μάνα του σε Windows - Mac - Linux.

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

Και εγώ σε Linux ειμαι πρωτίστος και σε MacOS (Windoz δε χρησιμοποιώ) και μου το κάνει αυτό. To keep-cr το δοκίμασα πριν το post μου, αλλά δεν έκανε κάτι (βάσει παρόμοιου θέματος εδώ https://stackoverflow.com/questions/6289001/git-am-format-patch-control-format-of-line-endings).

 

Γενικά παίρνω warnings τύπου: warning: 2 lines add whitespace errors, τα οποία δε ξέρω αν αφορούν τον κώδικα ή τα commit messages.

 

Ο μόνος τρόπος που βρήκα να δουλεύει είναι αν υπάρχει κενή γραμμή μεταξύ commit messages.
 

Επεξ/σία από Dr.Fuzzy
Δημοσ.

Επίσης στην περίπτωση μου αν κάνω απλά:

git rebase --committer-date-is-author-date SHA

τι διαφορά έχει με το να κάνω patch, reset, am;

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

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

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

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

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

Σύνδεση

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

Συνδεθείτε τώρα
  • Δημιουργία νέου...