2016-12-02 84 views
0

我正在一家大型企业企业工作,其中所有开发人员机器均为Windows 7 Enterprise SP1。是否有一个“安全”的unix模拟器在Windows上运行git?

我正在运行从RTC到git的主要移植项目(导致类似1200 git回购)。在生产环境,构建或测试环境中没有Windows服务器 - 一切都是Solaris或RedHat。该解决方案将推出给约200名开发人员。

通常会推动使用更多的Unix命令行工具,并且Windows上有几种不同的替代方法,如:Cygwin,git-bash,cmder。我避免运行一个完整的linux虚拟机,因为它引入了太多的其他问题(大多数开发人员没有本地管理员权限,因特网代理是一个常见的麻烦,所以我不想让网络成为NAT的更大问题)。

过去8个月我一直在运行Cygwin(mintty 2.6.2),直到今天我一直在使用git(v2.8.3)碰到一个非常令人关注的问题,git status甚至报告了一个干净的工作目录尽管多个文件和文件夹已被删除回购。只有在我重新创建了与其中一个已删除文件夹相同名称的文件夹后,所有已删除文件才能正确显示,并显示git状态。

我会解释症状和我在做什么,但到目前为止我没有转载这个问题。我怀疑问题是在模拟的linux文件系统和实际的Windows文件系统之间存在问题。各种模拟器的实现方式有什么不同吗?

我打的具体问题有以下症状:

客户端:

  1. git的状态显示出一个干净的工作目录
  2. git的日志显示,3款A,B和C(提交Ç检查退出)
  3. 回购内容是一个文件夹包含一个文件,另外2个文件在根文件夹中,再加上带有内容的.git文件夹
  4. git存储列表为空
  5. GIT中分支-a只报告主,HEAD和原点/主

服务器端:

  • 原点包含13个附加文件夹,每一个文件
  • 的也包含原点提交A,B和C
  • 只有主分支是本
  • 提交一个为初始空提交。 提交B是所有内容添加的地方,14个文件夹和16个文件。 提交C是另一个空提交

    提交A和提交C都是使用工具创建的,以帮助进行迁移。它运行两个命令:“git init”和“git commit --allow-empty -m'初始提交'”

    我无法理解git status如何报告删除的文件(我记得删除它们,但它以前一些日子有多个计算机进入休眠状态,并可能是一个或两个重起恢复我的工作)

    试图找出发生了什么事我这样做:

    1. 我创建了一个新的文件,然后运行“混帐添加“,”git commit“(创建D)和”git push“。
    2. 提交D出现在具有新文件的服务器上。服务器上仍存在13个额外的文件夹和文件。
    3. 我跑了“混帐拉”,这回“已经是最新的”
    4. 我检查了每一个变化承诺在客户端和服务器端和每一个差异是一样的
    5. 我克隆一个新副本的回购和内容匹配服务器与13额外的文件和文件夹与额外的提交D和额外的文件
    6. 然后我重新创建一个与删除的文件夹名称相同的文件夹,并运行“git status”所有已删除的文件和文件夹都正确报告。

    我不能解释这个任何其他方式,除了一个严重的错误,只是在Cygwin中使用git不安全。我希望社区可能会在这方面对我提出一些建议,这是一个足够明确的问题,即mod不会标记我的帖子。

    我会尽我所能尝试重现问题,并在有更多信息时更新问题。

    编辑:更新2016年12月8日

    我试图重现错误都没有成功。如果我在工作中再次看到它,我会更新此问题。

    +0

    为什么更好你不只是使用本机[Git for Windows](http://git-for-windows.github.io/)端口?一段时间以来,它的发展甚至得到了Windows™的支持者的支持。它为那些喜欢获得更多“类Unix”体验的人提供'MinTTY'和一个'bash'端口。同时它在本机Windows控制台中运行正常。 – kostix

    +0

    @kostix我的git已经安装了windows,但是我的git bash在mintty(2.0.6)的旧版本中运行,而不是在cygwin中运行。我更喜欢cygwin的主要原因是安装tmux + vim等其他工具比较容易。 – philbert

    回答

    1

    我从来没有在Cygwin上看到Git的这种行为。实际上,目前我在Cygwin中使用Git for Windows,它也可以正常工作。我曾经使用Cygwin Git,但是我感觉它比Windows的Git慢,比如我从Cygwin切换到Git for Windows,并且效果很好。

    如果您在某些时候将Windows盒更新到Windows 10,您还可以考虑另一种选择,Windows的Subsytem for Linux,它是由MS与Canonical一起开发的基于Ubuntu的虚拟Linux环境。在我看来,它仍然处于成熟和不完全可用的状态,但是在那里你有一个本地支持的虚拟Linux环境,你可以使用apt-get等等。

    1

    你提到的问题确实是出乎意料的,我怀疑Cygwin可能会导致它。但你有以下选项

    • git带有git bash,它支持所有主要的unix命令,它看起来完全像unix shell。我在Windows 10上使用git版本2.9,并大量使用grep等主要的unix命令,sed &查找,并且它们都非常出色。即使它支持vi但我不使用它

    • git带有git CMD,并且相同的git命令可以在windows命令提示符下工作,就像它们在unix上一样。你不应该需要一个单独的模拟器。

    • 虽然你提到你使用的是Windows 7,但Windows 10自带的Unix猛砸

    • 原生支持可以使用的GnuWin32但我怀疑它会比Cygwin的

    +0

    感谢您对gnuwin32的建议。我也设法谷歌这个有用的答案:http://stackoverflow.com/questions/10712550/difference-between-gnuwin32-and-cygwin – philbert

    相关问题