如何让Git将本地目录从PUSH排除到远程,但仍然是本地仓库的一部分

时间:2012-06-15 21:08:01

标签: git

使用git,我希望能够保留某个文件夹作为我本地项目的一部分(在分支机构中使用它等)但我不希望这个目录被推送到公共git服务器。

有问题的文件夹有一些项目不需要的CLI Java资源,但我希望与将要上线的分支工作保持同步。

这可能吗?

3 个答案:

答案 0 :(得分:1)

答案非常简短。原因如下:当您将本地git分支推送到服务器时,它会按原样推送,没有任何异常。由于提交包含文件,如果某些文件不被推送,它会在内部搞乱git。 这种选择性行为是不受支持的,我想它永远不会,因为大多数时候你需要这些东西时你不正确地使用git。

然而,有很多方法:

  1. 第一个是简单地将东西添加到回购中。你显然需要它,并且你希望它是版本控制的,所以从我的观点来看,将文件添加到git只需要它。
  2. 您可以尝试使用git-submodules,但这也会将文件添加到您的repo中。您的java cli将是另一个存储库,您的原始仓库将跟踪版本。
  3. 你可以告诉git忽略子文件夹,而不是在那里创建你的java-cli存储库而只是两个没有任何交互。
  4. 我肯定会选择1,因为当我需要项目的东西时,它就属于repo,即使它是java cli。

答案 1 :(得分:0)

如果您根本不需要跟踪那些文件......

...你可以使用git ignore

如果您想在本地跟踪 ...

...但是没有将它们放在远程仓库中我只能给你一些提示/想法我从未尝试过,但你最终可能会拥有不同的存储库,而且可能会强烈>变得有点讨厌。

我会看看(从可能正常可能非常混乱和一个坏主意):

  • 嵌套存储库
  • 推送时移除 :(缺点:您可能无法正确区分,因为历史记录仅匹配临时存储库。您 可以 当然不知何故也会破坏你的差异,使设置更加混乱。)
    • 步骤:
      • 在将存储库克隆到临时文件夹之前
      • 从新创建的克隆中的整个历史记录中删除子文件夹(使用不同的提交哈希值获取另一个存储库)
      • 推送新创建的存储库
    • 选项:触发器:
      • pre-push Hook
      • 手动执行上述操作,而不是使用git push
    • 选项:删除:

再说一遍:我没有使用其中任何一个不知道他们的缺点,陷阱等。但对我来说似乎是subtrees这是上述最好的解决方案。

其余大部分确实对我来说似乎非常混乱,但在一天结束时唯一重要的是什么对您有用

  

Ship lousy stuff, but ship.

...在Wasabi

答案 2 :(得分:0)

晚会晚了,但问题还是不错的。您正在尝试仅使用所需工具的一半来解决部署问题:要实现您的目标,您必须在部署链中同时使用 git 和依赖项管理器。

使用 git,您可以版本跟踪所有代码,也可以跟踪 CLI Java 内容,但使用 DM,您的 CLI Java 内容将被标记为“开发”包。

在生产中部署时,您应该排除所有“开发”包。

在 Java 中,我认为正确的工具应该是 Maven,在 PHP 中有 Composer,在 Javascript 中最著名的是 NPM。

我的两(晚)美分