【问题标题】:Use Git list output to copy files for archiving使用 Git 列表输出复制文件以进行归档
【发布时间】:2014-03-28 09:05:08
【问题描述】:

我目前正在帮助远程维护客户的项目。我是唯一的开发人员,因此我采用了一些非正统的方法/想法。

问题

客户端使用 Visual Studio 2010 + Team Foundation Server 进行源代码控制。我正在通过 VPN 在 Mac 上工作,并尝试了几种方法来使他们的 TFS 可行。我已经尝试了 Eclipse 的 TFS 插件,但没有成功(VPN 确实连接到 TFS)。目前,我必须通过虚拟机对 TFS 进行完整的“检查以进行编辑”,然后通过 VPN 传输项目以覆盖这些文件。至少可以说不是一个可持续的解决方案。

解决方案?

我想知道是否有办法:

  • 从 GIT 获取更改文件列表(我认为这是解决方案 (How to list all the files in a commit?)
  • 然后使用该列表作为进入并获取这些文件的一种方式,同时保持其文件夹结构
  • 从那里我可以做我的转储 VPN 进入在 TFS 中映射了项目的 VM。

或者如果有什么我忽略或没有想到的,请推荐他们,我全神贯注。

【问题讨论】:

    标签: eclipse visual-studio-2010 git tfs vpn


    【解决方案1】:

    首先,我假设您在 TFS 服务器上或附近运行虚拟机,而不是在您的 Mac 上。如果没有,您可以使用 VMware/VirtualBox 共享一个目录,然后在您的 Mac 上进行编辑...

    听起来你可以用普通的旧 Git 实现你想要的。如果你:

    1. 在 VM 上创建一个裸存储库 (git init --bare)
    2. 添加一个 post-receive 钩子以将文件从 master 分支(例如)复制到 TFS 目录中,愉快地覆盖 (http://git-scm.com/book/en/Customizing-Git-Git-Hooks)
    3. 将源的本地副本初始化为 Git 存储库 (git init)
    4. 添加远程存储库。假设它是一个 Windows 机器,您可以通过 VPN 使用 SMB 共享文件夹,因此就 Git 而言,您的远程是“本地的”。 (git remote add tfsserver file:///Volumes/tfsmount/code

    您的第一次推送会很昂贵(但您可以预先填充远程仓库来解决这个问题),但后续推送将只是变更集。然后 post-receive 钩子会负责更新文件,你在笑。

    当然,然后你就可以让他们对 Git 的神奇之处留下深刻印象,让他们迁移,然后你的问题就永远消失了 :)。

    更新:以下链接以更新远程网站为幌子,更详细地描述了这些步骤:http://toroid.org/ams/git-website-howto

    【讨论】:

    • 嗨@Spikeheap。我在我的 Mac 上运行 MSFT 的远程桌面连接客户端。我确实有一个“共享”文件夹,a) 在我的本地 Mac 上,b) 在 VM 上显示为网络驱动器。实际上 TFS 在另一台机器上,而不是我正在远程处理的机器上。所以基本上我通过虚拟机访问的所有客户端基础设施。我目前正在考虑在我点击的 VM 上安装 git,但由于这是一家较大的公司,不确定他们的接受程度如何:/
    • 嗯,听起来很有趣。您能否在 VM 上为 TFS VM 创建一个网络共享?如果是这样,您可以执行简单的 rsync 以保持两个共享文件夹同步,并在 Mac 中处理代码。然后编辑将是 Mac -> VM 共享文件夹,(在 VM 上)git post-commit hook 复制到 TFS 共享文件夹 -> TFS 服务器。不漂亮但不需要人工干预,你可以在 Mac 上使用 Git...
    • 那是我希望采取的路线。我的挂断是我似乎找不到有关创建 git 服务器 post-receive 挂钩的有用教程。我不知道它是否像创建 shell 脚本一样简单,因为我看到的许多 API 教程都是特定于 Atlassian 或其他 git 插件的。我对 git 的更高级功能非常陌生。
    • 我正在并行挖掘的一件事可能是看看是否有办法说 git archive STAGE --format=zip > archive.zip 但是 STAGE 不像 HEAD 或马斯特群岛再说一次,这是一个极端情况,我很难获得针对我的问题的特定信息。有没有一种简单的说法,鉴于这些文件尚未提交但已暂存,将它们转储到 zip 文件中或复制它们?
    • 当然,添加一个钩子是微不足道的:)。如果您查看 .git/hooks 目录,您会看到一些示例。您需要做的就是在其中创建一个用于复制的文件。我 假设 在 Windows 上它将是一个批处理文件(虽然没有 .bat 结尾)。如果钩子失败,您将在提交后在客户端上获得输出。我会坚持使用 post-commit 挂钩,而不是尝试推断哪些文件处于某种状态——这就是 Git 擅长的!
    猜你喜欢
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 2012-08-30
    • 2016-01-04
    • 1970-01-01
    • 2013-09-25
    相关资源
    最近更新 更多