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

Reply via email to