Ο σκοπός μου είναι να μειώσω το overhead. Γι αυτό κοιτάω για λύσεις οι οποίες παίζουν ήδη σε distributed περιβάλλον και όχι για τρόπους να κάνω μία client-server αρχιτεκτονική να δουλέψει σε distributed περιβάλλον. Παρότι μπορώ να προσαρμόσω π.χ. το Subversion για να δουλεύει χωρίς άμεση σύνδεση, θα έχω περισσότερα χειροκίνητα βήματα. Ουσιαστικά αυτό που θέλω είναι private commits και σύνδεση σε κεντρικό repository χωρίς όμως να είμαι υποχρεωμένος να έχω συνεχή σύνδεση στο κεντρικό repository.
Όσον αφορά τo shelve, αυτό υπάρχει μόνο στον TFS (με το δικό του, πολύ μεγάλο overhead, 2GB Ram στην καθισιά του λόγω Sharepoint) και δεν είναι αντίστοιχο του patch που μάλλον εννοείς. Θα μπορούσα όντως στο SVN να φτιάξω ένα patch το οποίο μετά .... θα πάρω από το laptop χειροκίνητα και θα το κάνω apply στον server του σπιτιού και του γραφείου ..... Μάλλον χειρότερο overhead θα έχω έτσι. Από την άλλη, το shelve μου δίνει ένα μόνο commit, ενώ εγώ θέλω κανονικά πολλαπλά commits και branching. Μπορεί να περάσει μία εβδομάδα μέχρι να πάω από το γραφείο, δεν μπορώ να κρατάω σημειώσεις "αυτό το shelve είναι γι αυτό, εκείνο για το άλλο κλπ.".
Όσο για τη 3G, δεν είναι τόσο σταθερή όσο υποστηρίζουν οι εταιρείες κινητής. Για να δουλέψει σωστά υποθέτουμε ότι είναι πάντα εφικτή (μέσα σε γραφείο, με σιδερένιες δοκούς, σε περιοχή με προβληματικό σήμα) και ότι δεν θα μου κοστίσει ο κούκος αηδόνι ανεβοκατεβάζοντας δεδομένα, δεν θα έχει μεγάλη καθυστέρηση, ότι τα updates θα γίνονται σε batches και όχι ανά αρχείο για να αποφευχθούν οι καθυστερήσεις από τα roundtrips, ότι σε περίπτωση προβλήματος θα παίρνω αμέσως ειδοποίηση και δεν θα περιμένω για timeout.
Η προσωπική μου πείρα με χρήση πακέτου 5GB/μήνα για 1.5 χρόνο τώρα είναι ότι όλα αυτά .... απλά δεν ισχύουν. Στο τελευταίο DotNetZone event έφαγα 10 λεπτά προσπαθώντας να συνδεθώ σε ένα Google spreadsheet για να ανεβάσω το όνομα του νικητή της κλήρωσης, χωρίς επιτυχία. Μία ώρα πριν, είχα καταφέρει να ανεβάσω άλλους νικητές χωρίς κανένα πρόβλημα. Στο ίδιο σημείο, από τη μία ώρα στην άλλη, η σύνδεση είχε χαθεί.
Αντίθετα, χρησιμοποιώντας ένα version control όπως το Git, το Bazaar ή το Mercurial μπορώ να κάνω τοπικά όσα commits, branches θέλω και όταν έρθει η ώρα να στείλω τις αλλαγές στην υπόλοιπη ομάδα (συνεργάτες, servers στο σπίτι και τη δουλειά) ακόμα και με .... email. Μπορώ επίσης να εκμεταλλευτώ την (εκ φύσεως) ασταθή 3G σύνδεση για να στείλω μαζικά τις αλλαγές όταν έχω σύνδεση, ή να τις κρατήσω για αποστολή αργότερα αν δεν έχω.
Δεν το έχω δέσει όμως ότι θα φύγω από Subversion και θα πάω σε Mercurial ή Bazaar. Θα δοκιμάσω τί βολεύει και θα δω. Εξάλλου, το Subversion το ίδιο προσθέτει όλο και περισσότερες δυνατότητες για offline λειτουργία, οπότε μπορεί να αποφασίσω να γυρίσω σε αυτό στο τέλος.
Το μόνο για το οποίο είμαι σίγουρος είναι ότι δεν θα πάω σε TFS σύντομα. Είναι πολύ ακριβό να κρατάς 1 VM και 2 GB μνήμης τουλάχιστον απλά και μόνο για το version control.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos