imitheos Δημοσ. 9 Ιουνίου 2017 Δημοσ. 9 Ιουνίου 2017 Στο αρχικό μήνυμα έλεγες ότι έκανες rebase -i για αυτό σου έγραψα όλη την χειροκίνητη διαδικασία. Για κάποιο λόγο το --c..author-date δεν παίζει σε interactive rebase. Αν δεν μιλάμε για interactive rebase, τότε ναι μπορείς να το κάνεις κατευθείαν.
Dr.Fuzzy Δημοσ. 9 Ιουνίου 2017 Μέλος Δημοσ. 9 Ιουνίου 2017 Ναι τελικά το έκανα κατευθείαν και γλύτωσα και το ποβλημα με τα CR. Τελευταίες δυο ερωτήσεις, έστω το παρακάτω log: commit 32323b3be08d197783c3bff3e463750d42c47e98 Author: Imitheos <[email protected]> AuthorDate: Tue Jun 6 19:52:36 2017 +0300 Commit: Imitheos <[email protected]> CommitDate: Tue Jun 6 19:52:36 2017 +0300 Implement blah blah Update README commit 2dba928652cdb3b261c7175d4e65ea0350278eca Author: Dr.Fuzzy <[email protected]> AuthorDate: Wed Feb 1 14:51:27 2017 +0200 Commit: Dr.Fuzzy <[email protected]> CommitDate: Wed Feb 1 14:51:27 2017 +0200 Remove blah blah commit 1574f8806097ea863fe1cabec8a3624b81a466eb Author: delk <[email protected]> AuthorDate: Fri Mar 18 14:18:27 2016 +0200 Commit: Dr.Fuzzy <[email protected]> CommitDate: Fri Mar 18 14:18:27 2016 +0200 Add blah blah Add README commit 1ff5045716c5235720b543769a005b5d0d33e373 Author: delk <[email protected]> AuthorDate: Mon Nov 16 02:20:08 2015 +0200 Commit: delk <[email protected]> CommitDate: Mon Nov 16 02:20:08 2015 +0200 Initial commit 1. O user delk=Dr.Fuzzy, αλλά το commit εγινε σε διαφορετικά μηχανήματα και το git user και mail environment ήταν διαφορετικά ορισμένα. Μπορώ να αλλάξω στο 1ο commit 1ff5045716c5235720b543769a005b5d0d33e373 το Commit user/mail απο delk <[email protected]> σε Dr.Fuzzy <[email protected]> χωρίς όμως α. να διαφοροποιηθεί το CommitDate σε σχέση με το AuthorDate, β. να μην αλλάξουν τα Commit/CommitDate στα απο πάνω commits; Κάνοντας git rebase -i --root --committer-date-is-author-date επηρεάζει και όλα τα άλλα εκτός από το 1o commit. 2. Μπορώ να κάνω το Commit=Author στα πρώτα 3 commits εκτος του HEAD (32323b3be08d197783c3bff3e463750d42c47e98) με την προυπόθεση ότι πρώτα εχει γίνει επιτυχώς το 1., χωρίς να διαφοροποιηθούν τα CommitDate σε σχέση με τα AuthorDate; Imithee βρίσε ελεύθερα...
imitheos Δημοσ. 9 Ιουνίου 2017 Δημοσ. 9 Ιουνίου 2017 Με τις ημερομηνίες και τους authors μπορείς να κάνεις ό,τι θέλεις. Όσον αφορά το β "να μην αλλάξουν τα Commit/CommitDate" αν όπου Commit εννοείς το sha1 hash, τότε όχι δεν μπορείς. Εφόσον θα αλλάξει ο χρήστης (ή η ημερομηνία ή το tree ή οτιδήποτε απαρτίζει ένα commit), τότε θα αλλάξει το commit hash και κατά συνέπεια οποιοδήποτε commit από εκεί και πέρα μια και θα αλλάξει ο parent του. 1
Dr.Fuzzy Δημοσ. 9 Ιουνίου 2017 Μέλος Δημοσ. 9 Ιουνίου 2017 ΟΚ, πάντως δεν εχω καταλάβει τη λογική πίσω απο το αν αλλάξει o user του parent commit να πρέπει να αλλάξει το CommitDate των children commits.
defacer Δημοσ. 9 Ιουνίου 2017 Δημοσ. 9 Ιουνίου 2017 Το hash του commit μαγειρεύει μέσα ένα κάρο πράγματα, βασικά metadata του εαυτού του, αλλά επιπλέον και το hash του parent commit. Οπότε αν έχεις commits Α -> Β και κάτι αλλάξει στο Α, ακόμα και το πιο ασήμαντο κομμάτι metadata, δεν είναι πλέον το commit A αλλά το A'. Το Β με τη σειρά του αφού πλέον δεν έχει parent το A δεν είναι το B αλλά το Β', που είναι ένα τελείως μα τελείως καινούριο commit "παντελώς άσχετο" με το Β, "απλά τυχαίνει" να κωδικοποιεί το ίδιο changeset. Και αφού είναι καινούριο διαφορετικό commit τότε προφανώς έχει δικό του καινούριο date κλπ. 1
imitheos Δημοσ. 10 Ιουνίου 2017 Δημοσ. 10 Ιουνίου 2017 Δεν το εξηγώ καλά μάλλον και σε μπερδεύω. Όταν αλλάζει ο author ενός commit φυσικά και _ΔΕΝ_ χρειάζεται να αλλάξει η CommitDate. Δεν είπα ποτέ κάτι τέτοιο. Αυτό που είναι υποχρεωτικό να αλλάξει είναι το Commit SHA1 Hash. 1
Dr.Fuzzy Δημοσ. 10 Ιουνίου 2017 Μέλος Δημοσ. 10 Ιουνίου 2017 Αμ ΟΚ τοτε, μα και εμένα μου φάνηκε περίεργο ! Δε με απασχολεί να αλλάξει το SHA1 hash καθόλου. Αν μπορεις πες μου πως θα πετύχω τα 1 και 2 με τους περιορισμούς που εχω στο προηγούμενο post μου γιατι με αυτα που δοκίμασα μέχρι στιγμής δεν τα εχω καταφέρει.
imitheos Δημοσ. 10 Ιουνίου 2017 Δημοσ. 10 Ιουνίου 2017 Υπάρχουν πολλοί τρόποι να γίνει αυτό αλλά δεν θυμάμαι αν κάποιος θεωρείται πιο δόκιμος και έχω την εντύπωση ότι όλοι θα αλλάξουν την commitdate οπότε μετά θα χρειαστεί να κάνεις αυτό που περιγράψαμε πριν. Ένας τρόπος που μου ήρθε στο μυαλό είναι να τρέξεις interactive rebase και να επιλέξεις edit αντί για pick στα commit με λάθος author οπότε θα σταματάει το rebase εκεί και θα μπορείς να τρέξεις git commit --ammend για να διορθώσεις το commit. Για να αλλάξεις τον author είτε θα έχεις κάνει export τις απαραίτητες μεταβλητές (GIT_AUTHOR_NAME/EMAIL και αντίστοιχα για committer) ή να σαν επιλογή στο git-commit "--author τάδε" Ο κλασικός τρόπος που προτείνεται για να πειράξεις οτιδήποτε στο repo είναι το filter-branch. Από ό,τι θυμάμαι (και από ό,τι λέπω στην manpage) εσύ θέλεις το env-filter μια και θέλεις να πειράξεις το authorship. git filter-branch --env-filter ' if test "$GIT_AUTHOR_EMAIL" = "root@localhost" then [email protected] fi if test "$GIT_COMMITTER_EMAIL" = "root@localhost" then [email protected] fi ' -- --all Το παράδειγμα που έχει στην manpage είναι το παραπάνω οπότε εσύ θα βάλεις τα δικά σου και επίσης θα προσθέσεις 2 if ακόμη για τα _NAME αντί για _EMAIL. 1
Dr.Fuzzy Δημοσ. 10 Ιουνίου 2017 Μέλος Δημοσ. 10 Ιουνίου 2017 Σ' ευχαριστω πολυ. Κοίτα, ο 1ος τρόπος που περιγράφεις τον δοκίμασα και απο εκεί έβγαλα τους περιορισμούς που έθεσα στα 1 και 2. Κοντολογίς δεν κατάφερα να διατηρήσω όλους του περιορισμούς (διατηρώντας ενα περιορισμό αναιρούσα κάποιον άλλο, κοκ). Θα δοκιμάσω το 2ο τροπο με filter-branch και θα ενημερώσω.
Dr.Fuzzy Δημοσ. 11 Ιουνίου 2017 Μέλος Δημοσ. 11 Ιουνίου 2017 Καταρχήν θέλω να ευχαριστήσω τον Imitheo για τη βοήθεια και την υπομονή του να μου απαντήσει σε όλες τις ψυχαναγκαστικές μου ερωτήσεις! Συνοπτικά: έφτιαξα τις ημερομηνίες με: git rebase --committer-date-is-author-date SHA και τα διαφορετικά ονόματα και mail με (διατηρώντας τα tags): git filter-branch --env-filter ' if test "$GIT_AUTHOR_EMAIL" = "[email protected]" then [email protected] fi ... ' --tag-name-filter cat -- --all και τέλος έκανα push (commits, tags) στο remote: git push -f origin master git push -f origin --tags
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα