<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Version control in Archived Groups</title>
    <link>https://community.qlik.com/t5/Archived-Groups/Version-control/m-p/695728#M2709</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes that are excellent posts&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 22 Sep 2014 07:16:59 GMT</pubDate>
    <dc:creator>vadimtsushko</dc:creator>
    <dc:date>2014-09-22T07:16:59Z</dc:date>
    <item>
      <title>Version control</title>
      <link>https://community.qlik.com/t5/Archived-Groups/Version-control/m-p/695724#M2705</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi all QDF managers&lt;/P&gt;&lt;P&gt;I've done some attempts handling the qlikview development in svn. Checking in my whole folder structure (omiting qvd, qvw etc) into svn has been great for tracking our development. I prefere not to use the qlikview-client version handling function, because my qlikview development contains more than just the prj-folder. I like to track changes in my includes and other subfolders as well. It is also good to keep all folders in SVN when a new developer is checking out a project. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;However when it comes to environment with structured Test Acc Prod there is an issue. Checking in the whole qdf will not work when connection strings and other sourcepaths&amp;nbsp; differ. For these environments it feels like it is not a good idea to put the QDF into version control. Compare to my screenshot from the QDF deployment guide document.&lt;/P&gt;&lt;P&gt;&lt;IMG alt="Resources needed in DTAP promotion process.PNG.png" class="jive-image" src="/legacyfs/online/66720_Resources needed in DTAP promotion process.PNG.png" /&gt;&lt;/P&gt;&lt;P&gt;Do anyone of you have exerience of a good set up with QDF combined with version control that keeps all your development in svn, but in a efficient way keeps Test, Acc and Prod specific data locally on each machine? &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards&lt;/P&gt;&lt;P&gt;&lt;A href="https://community.qlik.com/qlik-users/100292" target="_blank"&gt;Vegar Arntsen, Lie&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;egbs consulting ab&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&lt;A class="jive-link-external-small" href="http://bi-effekten.se" target="_blank"&gt;http://bi-effekten.se&lt;/A&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/EM&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 22 Jul 2025 17:59:49 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Archived-Groups/Version-control/m-p/695724#M2705</guid>
      <dc:creator>Vegar</dc:creator>
      <dc:date>2025-07-22T17:59:49Z</dc:date>
    </item>
    <item>
      <title>Re: Version control</title>
      <link>https://community.qlik.com/t5/Archived-Groups/Version-control/m-p/695725#M2706</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;One way to go could be to split the projects, having the QDF structure in one project and the QVW in others?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 18 Sep 2014 07:04:48 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Archived-Groups/Version-control/m-p/695725#M2706</guid>
      <dc:creator>joachim_boivie</dc:creator>
      <dc:date>2014-09-18T07:04:48Z</dc:date>
    </item>
    <item>
      <title>Re: Version control</title>
      <link>https://community.qlik.com/t5/Archived-Groups/Version-control/m-p/695726#M2707</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I would like to know good recipe for that scenario too. We too keep our QDF projects in CVS (git).&lt;/P&gt;&lt;P&gt;My current approach is to group all environment specific variables in one file and to include that file in .gitignore&lt;/P&gt;&lt;P&gt;So that one file we have to edit and maintain separately for each site.&lt;/P&gt;&lt;P&gt;Not good solution but I have no better one.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 19 Sep 2014 12:56:25 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Archived-Groups/Version-control/m-p/695726#M2707</guid>
      <dc:creator>vadimtsushko</dc:creator>
      <dc:date>2014-09-19T12:56:25Z</dc:date>
    </item>
    <item>
      <title>Re: Version control</title>
      <link>https://community.qlik.com/t5/Archived-Groups/Version-control/m-p/695727#M2708</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Jonas Wiklander ( community.qlik.com/people/jonas.wiklander ) have written a series of blog posts on the topic QlikView and version control. I found it interesting and worth a read if you're interested in the topic. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Links below:&lt;/P&gt;&lt;P&gt;http://blogg.sigma.se/en/The-Business-Intelligence-blog/Jonas-Wiklander/Dates/2014/3/Qlikview-and-version-control-part-1/&lt;/P&gt;&lt;P&gt;http://blogg.sigma.se/en/The-Business-Intelligence-blog/Jonas-Wiklander/Dates/2014/3/Qlikview-and-version-control-part-2/&lt;/P&gt;&lt;P&gt;http://blogg.sigma.se/en/The-Business-Intelligence-blog/Jonas-Wiklander/Dates/2014/4/Qlikview-and-version-control-part-3/&lt;/P&gt;&lt;P&gt;http://blogg.sigma.se/en/The-Business-Intelligence-blog/Jonas-Wiklander/Dates/2014/4/Qlikview-and-version-control-part-4/&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 22 Sep 2014 07:14:47 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Archived-Groups/Version-control/m-p/695727#M2708</guid>
      <dc:creator>Vegar</dc:creator>
      <dc:date>2014-09-22T07:14:47Z</dc:date>
    </item>
    <item>
      <title>Re: Version control</title>
      <link>https://community.qlik.com/t5/Archived-Groups/Version-control/m-p/695728#M2709</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes that are excellent posts&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 22 Sep 2014 07:16:59 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Archived-Groups/Version-control/m-p/695728#M2709</guid>
      <dc:creator>vadimtsushko</dc:creator>
      <dc:date>2014-09-22T07:16:59Z</dc:date>
    </item>
    <item>
      <title>Re: Re: Version control</title>
      <link>https://community.qlik.com/t5/Archived-Groups/Version-control/m-p/695729#M2710</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Vegar.&lt;/P&gt;&lt;P&gt;For that specific problem we currently switching to new solution&lt;/P&gt;&lt;P&gt;:&lt;/P&gt;&lt;P&gt;We introduce universal variable `vU.Environment` in our projects. If you have test, acceptance and production sites, that variable would have value 'Test', 'Acc' or 'Prod' on that sites.&lt;/P&gt;&lt;P&gt;Then whe use that variable in any situation where we should have separate settings for sites.&lt;/P&gt;&lt;P&gt;For example: if you have separate db connections at your sites you can create three files instead one connection file:&lt;/P&gt;&lt;P&gt;Instead of Oracle_Connection.qvs we may have Oracle_Connection_Test.qvs, Oracle_Connecion_Acc.qvs and Oracle_Connection_Prod.qvs&lt;/P&gt;&lt;P&gt;Then we can include it as $(must_include=(vG.ConStringPath)\Oracle_Connection_$(vU.Environment).qvs)&amp;nbsp; and each site has it's own db connection.&lt;/P&gt;&lt;P&gt;Or we can use simple conditional code execution with `If` statement and so on.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Next question - how to manage that variable itself?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;We curently have bunch of scripts that we executing just after cloning some project from repository.&lt;/P&gt;&lt;P&gt;So we added new script `0.Administration\6.Script\Vbs\create_environment_variable.vbs` to that initialization phase:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="_jivemacro_uid_14119068483535839 jive_text_macro jive_macro_code" jivemacro_uid="_14119068483535839"&gt;
&lt;P&gt;Const ForReading = 1&lt;/P&gt;
&lt;P&gt;Set objFSO = CreateObject("Scripting.FileSystemObject")&lt;/P&gt;
&lt;P&gt;rootPath = objFSO.GetParentFolderName(objFSO.GetParentFolderName(objFSO.GetParentFolderName(objFSO.GetParentFolderName(Wscript.ScriptFullName))))&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Set objNet = CreateObject("WScript.Network")&lt;/P&gt;
&lt;P&gt;strCompName = objNet.ComputerName&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;envVar = "Prod"&lt;/P&gt;
&lt;P&gt;if strCompName = "OUR_TEST_MACHINE" then&lt;/P&gt;
&lt;P&gt;&amp;nbsp; envVar = "Test"&lt;/P&gt;
&lt;P&gt;end if&lt;/P&gt;
&lt;P&gt;if strCompName = "OUR_ACCEPTANCE_MACHINE" then&lt;/P&gt;
&lt;P&gt;&amp;nbsp; envVar = "Acc"&lt;/P&gt;
&lt;P&gt;end if&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Dim file&lt;/P&gt;
&lt;P&gt;path = rootPath &amp;amp; "\0.Administration\3.Include\1.BaseVariable\generated_environment_descriptor.qvs"&lt;/P&gt;
&lt;P&gt;set file = objFSO.CreateTextFile(path)&lt;/P&gt;
&lt;P&gt;file.Write "LET vU.Environment = '" &amp;amp; envVar &amp;amp; "';"&lt;/P&gt;
&lt;P&gt;file.close&lt;/P&gt;
&lt;P&gt;WScript.echo "Created file: " &amp;amp; path&lt;/P&gt;


&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;That script is called from the batch file project_init.bat located in the project root directory&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="_jivemacro_uid_14119068483489963 jive_text_macro jive_macro_code" jivemacro_uid="_14119068483489963"&gt;
&lt;P&gt;cd 0.Administration\6.Script\Vbs&lt;/P&gt;
&lt;P&gt;cscript create_environment_variable.vbs&lt;/P&gt;
&lt;P&gt;cscript create_sublime_project.vbs&lt;/P&gt;
&lt;P&gt;cscript create_etl_qv_apps.vbs&lt;/P&gt;
&lt;P&gt;cscript create_default_include.vbs&lt;/P&gt;
&lt;P&gt;cd ..\..\..&lt;/P&gt;


&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;To set that variable we added one line in each QDF 1.Init.qvs file right below line&lt;/P&gt;&lt;P&gt;`exit script when '$(vG.BasePath)' = '';`&amp;nbsp; see snippet:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="_jivemacro_uid_14119068483402125 jive_text_macro jive_macro_code" jivemacro_uid="_14119068483402125"&gt;
&lt;P&gt;// ADD envrironment descriptor variable&lt;/P&gt;
&lt;P&gt;$(must_include=$(vG.BasePath)..\0.Administration\3.Include\1.BaseVariable\generated_environment_descriptor.qvs);&lt;/P&gt;


&lt;/PRE&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt; Variable set so early in QDF bootstrap flow specifically to allow use correct value in If() functions in CustomVariables.csv files.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;And obviously we added new file to `.gitignore` file, so `.gitignore` at project root now looks like:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_14119068483209284" jivemacro_uid="_14119068483209284" modifiedtitle="true"&gt;
&lt;P&gt;*.qvw&lt;/P&gt;
&lt;P&gt;*.qvd&lt;/P&gt;
&lt;P&gt;!2.qvd/&lt;/P&gt;
&lt;P&gt;*.qvw.log&lt;/P&gt;
&lt;P&gt;~*.*&lt;/P&gt;
&lt;P&gt;*.zip&lt;/P&gt;
&lt;P&gt;*.7z&lt;/P&gt;
&lt;P&gt;*.tmp&lt;/P&gt;
&lt;P&gt;*.mdb&lt;/P&gt;
&lt;P&gt;*.ldb&lt;/P&gt;
&lt;P&gt;*.qvw.meta&lt;/P&gt;
&lt;P&gt;*.qvw.shared&lt;/P&gt;
&lt;P&gt;generated_environment_descriptor.qvs&lt;/P&gt;


&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 27 Sep 2014 13:02:51 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Archived-Groups/Version-control/m-p/695729#M2710</guid>
      <dc:creator>vadimtsushko</dc:creator>
      <dc:date>2014-09-27T13:02:51Z</dc:date>
    </item>
  </channel>
</rss>

