2011-08-25 67 views
5

我是.NET开发人员,但在我们的组织中,我们也有几个Microsoft Dynamics NAV开发人员。目前他们没有使用任何源代码管理。我对NAV知之甚少,但据我所知,您可以从NAV中编写对象并从脚本中重新导入。使用Git版本Microsoft Dynamics NAV?

既然如此,是否有人使用Git与NAV?你有没有遇到过任何陷阱?我想知道这是否是一个很好的解决方案,对于他们来说是否是一个好的解决方案,以及是否比使用Git和.NET更加复杂(我发现这很容易)。

回答

5

是的,我们将Git与Dynamics NAV一起使用,并获得巨大成功!

不好的一点是,在Git给出含义之前,所有对象都必须导出到txt。让我们希望微软将创建一个更简单的方法来将对象导出到txt。我们正在使用这个模型。用一般的主人创建一个Git仓库,并为我们改变的每个对象创建一个分支。所有源文件必须与分支顶部文件具有相同的名称才能使Git跟踪不同。以这种方式使用Git,我们绝不会将任何东西都合并到master中。开始使用Git之后,处理共享对象并跟踪其他NSC对代码所做的更容易。而且IT-Revision很高兴,因为所有的代码都有很好的文档记录,并且任何回退的方式都容易得多。我会充分认可使用动态导航的Git。

Navision的顾问,在石油&能源产业

+0

只是想知道,你有没有找到一个工具,会自动导出/从导航导入/导出本地git回购任何成功?我对此非常感兴趣 - 否则我很乐意开始尝试构建它(或者它的基本版本) – Charleh

4

我使用Dynamics NAV及混帐,但不是在同一时间。让我解释一下为什么。

Git本身很酷(其中GitHub它变得更好),但Windows端口很差,除非您不喜欢坚持类似unix的命令行,因为这是建议msysGit的推荐方式。不幸的是,Windows上的GUI工具并不好。

对我来说,让我的老板很难理解为什么使用分布式版本控制比通常的TFS更好。对于面向业务的人来说,一个大的中央存储库感觉更安全(因为它是我自己支付的服务器,我控制访问),并且更加健壮(我聘请了一位将运行维护程序的系统管理员)。

我决定不打击这个意志。我们使用分布式版本控制作为临时区域。所有不稳定的变化都存储在这个区域,我们在我们的团队中进行测试。完成稳定后,对象将合并到中央存储库中。大家看起来很开心。

关于混帐:最近我切换到另一个分布式版本控制 - fossil由于以下原因:

  • 它可以做一切的Git即可;
  • 它看起来,感觉和在Windows上原生的行为;
  • 它有一个web界面内置,我可以很容易地使它作为本地Windows服务运行;
  • 它集成了问题跟踪功能,所以我不再需要第三方工具;
  • Repository是一个单独的文件,所以我可以在我想要的任何地方随身携带笔驱动器;

关于我们的NAV解决方案。它超过1000个对象,大小超过20 MB。

编辑:半年多编码过的一些更新。

我们切换回git。由于它的自动合并是真棒。为了赢得赌注,我已经在4小时内将解决方案(修改过的标准对象和新的解决方案)从NAV7CTP3移至NAV7CTP5。虽然由四名开发人员组成的团队取得了相同的结果,但需要将近三周的日常工作。

Git确实有所作为。我相信与其他分布式版本控制系统可能会有相同的结果。

其原因是:GIT中和其他分布式系统中提交比即TFS和SVN节省了大量的详细信息。在正式开发过程中,这并不重要,但在合并时,所有来自Git的“冗余”信息都会产生变化。

在合并的Git发现它开始分支共同修订,然后应用来自两个支路逐步改变 - 以同样的方式为开发商改变了代码 - 将以上文件的解决方案。

如果同一行在两个分支中都被更改,则会显示冲突。如果不是,它只是将文件保存到工作文件夹中以备提交。

这里的一些统计数据:

  • 两个CTP3和CTP3代码库处理的文件总数大约是4000每;
  • 合并解决方案对象的总数为1170;
  • 冲突文件总数为140;
  • 成功自动合并的比例约为88%(1170-140)/ 1170 * 100 = 88%;
  • 大多数冲突都是对象版本的变化 - 微不足道的;
  • 约20个文件中的无重大冲突;
  • 琐碎的查找和替换所有合并的对象做(修复RunFormOnRec - > RunPageOnRec等);
  • 结果是基于CTP5的完全可导入的最新解决方案对象集;
  • 导入后编译错误的数量约为50;
  • 这些错误大部分都与从CTP3到CTP5完成的标准对象的更改有关;
  • 断层物体发生率约为4%(50/1170 * 100%= 4%);
+1

您有关于NAV5或NAV6和Git的任何经验吗?你使用什么样的界面?手动将文件导出为文本,然后在git中进行版本化?或者你是否有某种(半)自动界面直接从Navision执行版本控制? – lanoxx

+1

嗨@lanoxx,我使用裸指令行 - 它不隐藏Git的力量。如果您对良好的Git UI感兴趣,您可以试试[SmartGit](http://www.syntevo.com/smartgithg/index.html) - 它似乎是市场上唯一一款适用于Git的全功能GUI解决方案。然而,我使用裸机命令行 - 原因是速度和我的特殊[快捷方式](https://github.com/shytikov/git-nav) - 命令从git中分离和合并NAV对象。 – shytikov

+0

我在问,因为至少在NAV5和NAV6中,对象以二进制数据的形式存储在数据库中,所以为了版本化,必须明确地将它们导出为文本文件。 NAV7的情况仍然如此吗?每次进行更改时,您是否必须导出对象? – lanoxx

0

我们使用Git与Dynamics NAV的大获成功。但是我不得不说,这并不容易。 Dynamics NAV(我们使用版本2013)未针对git或基于文件的开发进行优化。开发通常直接在开发环境(经典客户端)中完成,它将源代码直接保存到数据库中。

所以我们所做的支持Git是:我们建立了很多,都有助于开发人员的NAV DB与本地的git文件夹同步有用的PowerShell命令。 F.E.我们有一个命令可以将带有修改标志的所有对象导出到本地git文件夹 - 或者是一个将所有对象导入git commit的命令。我们甚至使用它在开发机器上自动更新我们的测试数据库git push

但这就是说:开发所有这些过程并构建脚本并不容易。

因此,我建议你三思考使用动态导航与git的决定。这个软件并不适合与git一起工作,所以你将不得不做很多工作 - 问题是如果你的老板愿意给你时间建立必要的工具来顺利工作。

看一看Object Manager Advanced。这是我们以前使用的工具。我从idyn(公司)看到一次预览,他们用visual studio替换了经典的开发环境客户端! 我们从对象管理器高级切换到git作为主要开发工具,因为它不适合我们的商业案例。但我们仍在使用它。为Where Used功能女巫是伟大的! (电影是从一个旧的NAV版本,对不起)