# How do you do the version control in FM?

**URL:** <https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519>\
**Category:** Lounge (Discussions)\
**Created:** [November 20, 2019, 1:38am UTC](https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519 "2019-11-20T01:38:27Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![samfmp](https://avatars.discourse-cdn.com/v4/letter/s/a9a28c/32.png) [@samfmp](https://the.fmsoup.org/u/samfmp)\
**Post date:** [November 20, 2019, 1:38am UTC](https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519/1 "2019-11-20T01:38:27Z")

</div>

Hi, there are many version control tools in other languages. I am curious how do you do version control in FM?

Welcome to any comments. Thank you.

---

<div class="post-metadata">

**Author:** ![Cecile](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/cecile/32/98_2.png) [@Cecile](https://the.fmsoup.org/u/Cecile)\
**Post date:** [November 20, 2019, 3:13am UTC](https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519/2 "2019-11-20T03:13:55Z")

</div>

Do you mean while developing a solution or building a version control tool with FM?

---

<div class="post-metadata">

**Author:** ![samfmp](https://avatars.discourse-cdn.com/v4/letter/s/a9a28c/32.png) [@samfmp](https://the.fmsoup.org/u/samfmp)\
**Post date:** [November 20, 2019, 3:14am UTC](https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519/3 "2019-11-20T03:14:23Z")

</div>

Yes, Exactly.

---

<div class="post-metadata">

**Author:** ![Cecile](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/cecile/32/98_2.png) [@Cecile](https://the.fmsoup.org/u/Cecile)\
**Post date:** [November 20, 2019, 3:21am UTC](https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519/4 "2019-11-20T03:21:21Z")

</div>

Which?

Version control of the file you are developing

Or

Building a version control tool with FileMaker?

---

<div class="post-metadata">

**Author:** ![samfmp](https://avatars.discourse-cdn.com/v4/letter/s/a9a28c/32.png) [@samfmp](https://the.fmsoup.org/u/samfmp)\
**Post date:** [November 20, 2019, 3:57am UTC](https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519/5 "2019-11-20T03:57:55Z")

</div>

version control of the file I am developing.

---

<div class="post-metadata">

**Author:** ![Malcolm](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/malcolm/32/196_2.png) [@Malcolm](https://the.fmsoup.org/u/Malcolm)\
**Post date:** [November 20, 2019, 4:22am UTC](https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519/6 "2019-11-20T04:22:34Z")

</div>

The DDR and the XML copy both offer you the means to do this. Standard Diff tools don’t handle XML nicely so that’s a big drawback. I’m working on a tool that can produce sensible Diff form XML that would be suitable for locating unique differences in the XML output but its not ready for primetime.

---

<div class="post-metadata">

**Author:** ![Markus](https://avatars.discourse-cdn.com/v4/letter/m/b782af/32.png) [@Markus](https://the.fmsoup.org/u/Markus)\
**Post date:** [November 20, 2019, 7:05am UTC](https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519/7 "2019-11-20T07:05:23Z")

</div>

we do the most with FMPerception (DDR analyzer) via DDR.

There is a tool available called FMDiff that compares 2 versions of a fm file and displays differences

[https://www.macupdate.com/app/mac/38839/fmdiff](https://www.macupdate.com/app/mac/38839/fmdiff)

---

<div class="post-metadata">

**Author:** ![AndyHibbs](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/andyhibbs/32/3089_2.png) [@AndyHibbs](https://the.fmsoup.org/u/AndyHibbs)\
**Post date:** [November 20, 2019, 8:33am UTC](https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519/8 "2019-11-20T08:33:51Z")

</div>

Version control depends on how the development is carried out and by how many, or at least if by more than one person.

We always use the separation model, hence we have a UI file where the majority of development is carried out, we develop as a team and usually all development work is carried out files hosted on a development server.

Our requirement for versioning is not for the detail of the work, but to establish which is the live version, which is the development version along with a summary or what work has been carried out for each version. Other needs include whether a version has been uploaded to the development server for testing only, rather than development, or whether a development version has been removed from the server for offline work (say development during a journey on a laptop).

All scripts are fully commented and versioned from the date created and by who under a ‘changelog’ comments section located just after the script description comments, which are the first entries. After this, all changes are accompanied with descriptive comments, again dated and by who, along with a ‘changelog’ summary entry in descending date order so the last changes are displayed first.

We use a very simple solution. We use a versioning layout within the UI file. Layout text is used to add version numbers, date, person and a summary list describing what has been changed.

The version number is displayed on the home page of each solution and, displayed for full access only, large bright text such as ‘LIVE VERSION on xyz server’ or ‘DEVELOPMENT VERSION on zyx server’, etc.

This information is updated when a UI file is copied from a development server to a live server or visa versa.

We’ve tried more sophisticated solutions; one of our team wrote a complete record based system with automatic versioning, which was OK until we started using the FMDataMigration tool, which renders this useless (they are still getting stick from the rest of us, LOL) or to be more accurate it creates more work.

The above has stood us well for over 15-years. Our go to tool for any technical information is Perception.

---

<div class="post-metadata">

**Author:** ![Torsten](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/torsten/32/1574_2.png) [@Torsten](https://the.fmsoup.org/u/Torsten)\
**Post date:** [November 20, 2019, 9:21am UTC](https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519/9 "2019-11-20T09:21:01Z")

</div>

I use a system very similar to Andy’s for years. This works quite well without generating extra work.

---

<div class="post-metadata">

**Author:** ![Torsten](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/torsten/32/1574_2.png) [@Torsten](https://the.fmsoup.org/u/Torsten)\
**Post date:** [November 20, 2019, 9:26am UTC](https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519/10 "2019-11-20T09:26:13Z")

</div>

In a simple in-house repository you could store clones of the files (or even files with content) with version information. This can be created in FM, fully customised to your needs (single-file or multi-file solutions etc.)

---

<div class="post-metadata">

**Author:** ![Markus](https://avatars.discourse-cdn.com/v4/letter/m/b782af/32.png) [@Markus](https://the.fmsoup.org/u/Markus)\
**Post date:** [November 20, 2019, 11:47am UTC](https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519/11 "2019-11-20T11:47:00Z")

</div>

we got ‘release notes’ tables where we note every change, release numbers as well

Problem is the ‘principle of the biggest malevolence’ - the version-changes You are looking for, is exactly the only one forgotten to note (no matter if there are millions of records)…

---

<div class="post-metadata">

**Author:** ![Cecile](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/cecile/32/98_2.png) [@Cecile](https://the.fmsoup.org/u/Cecile)\
**Post date:** [November 20, 2019, 1:12pm UTC](https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519/12 "2019-11-20T13:12:50Z")

</div>

My technique was to save a copy of the dev file with the date of the day, work on the dev file locally while making some other requested changes on the live file, and then pull my hair out.  
(That was tongue-in-cheek, in case some didn’t figure out. Even though I did do all the above, I am certainly not recommending it!)

---

<div class="post-metadata">

**Author:** ![EfficientBizz](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/efficientbizz/32/252_2.png) [@EfficientBizz](https://the.fmsoup.org/u/EfficientBizz)\
**Post date:** [November 20, 2019, 1:24pm UTC](https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519/13 "2019-11-20T13:24:08Z")

</div>

I do kind of similarly.  
I have a Log-Book where I write protocol for all development. A simple text document.

v4.0.0 - [190922]

- _auto Validate:_  
_ßParse\_Invcoice: #19 / #22 - Scriptparameter ßload\_SchemaValid\_Invoice_

2 fields in the primary file:  
Version = 395 =\> v3.9.5  
built = 20191016 =\> released 16. Oct. 2019

For “about”, the user sees  
**MedicalBizz v3.9.5** [20191016]

---

<div class="post-metadata">

**Author:** ![jormond](https://avatars.discourse-cdn.com/v4/letter/j/35a633/32.png) [@jormond](https://the.fmsoup.org/u/jormond)\
**Post date:** [November 20, 2019, 8:02pm UTC](https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519/14 "2019-11-20T20:02:49Z")

</div>

The developer of FMPerception ( Dave Ramsey ) is also working on a comparison tool to intelligently diff the XML 2.0. It will be provided as a free add-on to current FMPerception subscribers.

I've been listening to him talk about the project on the podcast him and Joe Simpson do together.

> **[Project Update](https://project-update.com/)**
>
> Joe and Dave discuss the progress of their respective projects. Time for a Project Update.

---

<div class="post-metadata">

**Author:** ![cheesus](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/cheesus/32/182_2.png) [@cheesus](https://the.fmsoup.org/u/cheesus)\
**Post date:** [November 21, 2019, 9:13am UTC](https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519/15 "2019-11-21T09:13:05Z")

</div>

> A simple text document.

How unprofessional! And you call yourself a database developer? 😀 (Just kidding. I'm sure you get my sense of humour)

I use a FM database where I enter all Bugs and upcoming Features. It holds several fields like  
**Module** (Invoices, Addresses, ...), **Task** (or Feature), **Description** , **Category** (Feature, Bug, Note), **Date** , **Program-Version** , **Priority** and **Done**. And I also have a separate table for screenshots for each task.

Thus I can sort by different criteria depending from what I want to see. And of course I can find things easily.  
In the description field I usually define the problem, the reason and how I solved the problem (sometimes step by step to redo it on my final solution, after I tested it in a copy).

In my scripts I have a comment for the date of the last change.

My Versioning of the file is being made by TimeMachine.

 ![Developer%20History](https://canada1.discourse-cdn.com/flex030/uploads/fmsoup/original/1X/707dac0d8a40fe3c014a8d29f8d4a5948deb2ef6.jpeg)

---

<div class="post-metadata">

**Author:** ![cheesus](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/cheesus/32/182_2.png) [@cheesus](https://the.fmsoup.org/u/cheesus)\
**Post date:** [November 21, 2019, 9:16am UTC](https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519/16 "2019-11-21T09:16:52Z")

</div>

For those who would like to use it, here’s the file.

[Dev History.fmp12](https://the.fmsoup.org/uploads/short-url/oDGspsP2fx7vQEeq8UuKpQIyu6a.fmp12) (472 KB)

---

<div class="post-metadata">

**Author:** ![EfficientBizz](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/efficientbizz/32/252_2.png) [@EfficientBizz](https://the.fmsoup.org/u/EfficientBizz)\
**Post date:** [November 21, 2019, 9:27am UTC](https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519/17 "2019-11-21T09:27:44Z")

</div>

> [@cheesus](#):
>
> How unprofessional! And you call yourself a database developer? 😀

I take the blame as soon as Claris works the FDS-Forum Software with FileMaker Server technology 😅

---

<div class="post-metadata">

**Author:** ![MonkeybreadSoftware](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/monkeybreadsoftware/32/361_2.png) [@MonkeybreadSoftware](https://the.fmsoup.org/u/MonkeybreadSoftware)\
**Post date:** [November 21, 2019, 1:49pm UTC](https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519/18 "2019-11-21T13:49:01Z")

</div>

Please check [FM.RunDatabaseDesignReport](http://mbsplugins.eu/FMRunDatabaseDesignReport.shtml) and [FM.RunSaveAsXML](http://mbsplugins.eu/FMRunSaveAsXML.shtml) functions in [MBS FileMaker Plugin](https://www.monkeybreadsoftware.de/filemaker/), which allow you to write scripts to automatically do the DDR/XML and save them to a folder. Then you can post process them with script to split into separate files for each script and track changes there easily.

---

<div class="post-metadata">

**Author:** ![AndyHibbs](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/andyhibbs/32/3089_2.png) [@AndyHibbs](https://the.fmsoup.org/u/AndyHibbs)\
**Post date:** [November 21, 2019, 7:14pm UTC](https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519/19 "2019-11-21T19:14:27Z")

</div>

This is a really good post that tries to define ‘version control’.

It appears to be at least 2 things:

- The difference between one file and another

- Where does a file stand within the evolution of development

Going back to my Mac support days in publishing, the most common mistake was to have 2 (or more) versions of a QuarkXPress template being worked on by 2 designers at the same time. This always resulted in panic and a lot of work trying to create a third consolidated version.

This is similar to our particular needs, we need an overview of what is happening, but we absolutely need to know which is the latest version, sometimes it can be the one on site, that has had some small amendments since being upgraded, sometimes the one on the development server, or perhaps a local version.

For others it appears to be the specific changes within 2 files, perhaps these changes are going to be added to a live system having been added and tested to another version, or maybe versions.

The fmDataMigration tool perhaps also adds a new dimension to version control.

Interesting discussion and thanks to @samfmp for starting it.

---

<div class="post-metadata">

**Author:** ![samfmp](https://avatars.discourse-cdn.com/v4/letter/s/a9a28c/32.png) [@samfmp](https://the.fmsoup.org/u/samfmp)\
**Post date:** [November 25, 2019, 3:09pm UTC](https://the.fmsoup.org/t/how-do-you-do-the-version-control-in-fm/519/20 "2019-11-25T15:09:25Z")

</div>

Thank you all for the input on this topic. 😉  
I am just curious how do other developers do version control on their solution.😅

Thanks
