Hi, this is my (=not canonical) perspective
On Wed, May 10, 2017 at 07:56:19AM +0200, Joachim Tuchel wrote: > Hi guys, > > please forgive me if this mail is a sign of ignorance. I am not a > regular Pharo user and one of the reasons for this is that I didn't > like most of the source management tools around Monticello. Coming > from an envy background, it feels like not being ready for prime > time. Of course you guys have been proving you can work with these > tools quite well, but still I'd be interested in using Pharo in a > pure git-based environment, as it most closely resembles some of the > most-beloved features of envy. > > Over the years there was a lot of work and discussion on filetree, > gitfiletree, iceberg, cypress and maybe quite a few other projects > that sounded promising and interesting. But I must admit I lost > track of what was really done and how far things went in the last > years. > > So are there any pointers to info material that I could look at to > see what the current status of source control in Pharo 5 and Pharo 6 > is and/or will be soon? > > I am mostly interested in these topics: > > * git only - no monticello meta info any more - possible? first of all -- filetree is an export format which stores Pharo code in an organized fashion on disk... a folder for every package, folder for every class, file for every method... e.g. https://github.com/peteruhnak/pharo-changes-builder/tree/master/repository/ChangesBuilder.package/CBClass.class/instance this format makes it easier for git to manage the code. There however two variants of filetree... one containing metacello metadata, e.g. the red here https://github.com/peteruhnak/IconFactory/commit/729da03653d527bd6ca34e0a512b1c1c634fd32e - which caused a lot of pains during merging (because you are almost guaranteed a merge conflict)... so a new variant emerged which doesn't use this metadata and instead determines it directly from git versioning. neither GitFileTree (which is a filetree that performs git commits on the background) nor Iceberg use monticello metadata. GFT is still managed via Monticello tools, but the metadata is derived from git commits. This is what I've been using for ~two years until recently (now I've switched to Iceberg). I wrote a guide about GFT some time ago https://www.peteruhnak.com/blog/2016/07/25/how-to-use-git-and-github-with-pharo/ Iceberg uses the same filetree format as GFT (so they are compatible), but the tooling inside Pharo has changed. Now there is dedicated iceberg interface for managing git repositories and projects. Although Iceberg is not in stable yet, so it breaks from time to time, but when it works I am really happy with it. (Thanks Esteban & Nico!). > * tools like merge/diff, committing from within the image Committing from within the image is handled with both GFT and Iceberg; merging is not yet. (And of course you see diff when committing/comparing versions) > * dependencies within my own project as well as dependencies on > external code in - possibly multiple - external repositories With git came also the switch from ConfigurationOf to BaselineOf, which somewhat simplified version and dependency management. The Baseline is no longer filled with methods for each version, as this is handled by git. > * what is the current "most official" source repository for open > source code? for Monticello naturally SmalltalkHub/ss3; for git GitHub, however you are not restricted from other git sites (gitlab, bitbucket, your own server, ...) > * best practices for managing complex projects and keeping old > versions reproducible at any time well, this is quite general question... I'd say semver.org is a good start, however most people depend on #stable and #development, which are not actually versions, so reproducibility is not possible... but there is work being done iirc regarding better dependency management (Cargo iirc) > * tutorial for git newbies in a Pharo context? (Like, how do I start > with a new packege - create folder first and do git init, or start > in the image and push into repo later? as I said: beginners' stuff) Chapter 8 of Pharo by example, https://www.peteruhnak.com/blog/2016/07/25/how-to-use-git-and-github-with-pharo/ and possibly other resources. Peter