Εργαστήριο Τεχνολογίας Λογισμικού
+2 votes
123 views

Στην απλή εφαρμογή που έχουμε να φτιάξουμε στην εργασία έχουμε ένα σύστημα back-end το οποίο λειτουργεί αλλά χρειάζεται ακόμα προσθήκες, ένα σύστημα cli και ένα σύστημα front-end, τα οποία είναι ακόμη σε πρωταρχικό στάδιο και χρησιμοποιούν και τα δύο τον κώδικα του back-end. Ας υποθέσουμε ότι έχουμε το καθένα σε ένα ξεχωριστό branch. Αρχικά αυτό είναι καλή πρακτική; Μετά γίνεται μία προσθήκη στο back-end και το branch back-end ενημερώνεται. Γίνεται να ενημερώσουμε και τα άλλα branches χωρίς να μολύνουμε το back-end με buggy κώδικα που δεν έχει σχέση με το back-end? Αν πάμε απλώς να κάνουμε merge φαίνεται ότι αναγκαστικά θα πρέπει το back-end branch να υιοθετήσει και τον κώδικα των άλλων δύο branches. Θα βόλευε να έχουμε ένα συγκεντρωτικό branch development? Δεν θα ήταν κάπως προβληματικό αυτό επειδή ο κώδικας των επιμέρους τμημάτων frontend και cli έχει bugs?

in softeng by (730 points) | 123 views

1 Answer

+1 vote

(!) Γενικά καλό θα ήταν τα frontend/cli αποκλειστικά να χρησιμοποιούν κώδικα του backend και να μην τον αλλάζουν το καθένα για τις ανάγκες του (κακό practice, μπλέκεις τα μπούτια σου). Επίσης θεωρώ δεδομένο πως έχεις διαφορετικά directories για backend/frontend/cli, ή είναι αρκετά οργανωμένα ώστε το καθένα να έχει τα δικά του αρχεία και να τα ξεχωρίζεις εύκολα ( :') )

Ας θεωρήσουμε πως έχεις 3 branch ( backend, frontend, cli)

Δεδομένου του παραπάνω, φαίνεται πως τα branches frontend/cli χρειάζονται κώδικα που συνεχώς αλλάζει στο backend, άρα εφόσον στο "ιστορικό" τους τα ίδια δεν αλλάζουν κώδικα του backend, είναι αρκετά απλό να προσθέσεις στο ιστορικό αυτό και το κομμάτι ιστορικού του backend branch που ενημερώνει τον κώδικα που χρησιμοποιείς:

(εντός του branch που θέλεις να προσθέσεις τις αλλαγές του backend)

git rebase backend

Αυτό βέβαια θα γίνει ανώδυνα όταν δεν υπάρχουν conflict, δηλαδή όταν το ένα branch δεν αλλάζει κώδικα του άλλου.

Επίσης μπορείς να παίξεις με αυτό για να καταλάβεις γραφικά τι συμβαίνει.

Όσον αφορά το να έχεις διαφορετικά branch για κάθε μέρος του stack νομίζω είναι ότι καλύτερο μπορείτε να κάνετε εφόσον σας δίνεται μόνο 1 repository.

Προσωπικά θα έφτιαχνα 4ο branch το οποίο θα ονόμαζα κάτι του στυλ app-library το οποίο θα περιείχε αποκλειστικά κώδικα που μοιράζονται τα υπόλοιπα branch. Έτσι θα είχα μια πιο καθαρή τοπολογία του κώδικα και απλα θα έκανα ενα rebase όταν κάτι άλλαζε σε αυτό.

Τελος, θα ήθελα να σημειώσω πως το κάθε branch είναι μια σειριακή εφαρμογή αλλαγών, η οποία έχει αρχή και τέλος.
(Αν αυτό δεν σου είναι τελείως ξεκάθαρο μπορείς να ξαναδείς τα μαθήματα του @nickie για git ή να ψάξεις ότι παραπάνω θες μόνος σου -- υπάρχουν ατελείωτα resources)
Καλό θα ήταν (για λόγους καλής χρήσης του git) οι αλλαγές σου σε κάθε branch να αφορούν τον λόγο που το branch δημιουργήθηκε. Το git σε επιβραβεύει για αυτό κάνοντας την ζωή σου πιο εύκολη :D

by (3.0k points)

262 questions

254 answers

274 comments

2.9k users