83

我有一个远程仓库,我想在其中提交某些文件(将它们部署在云计算平台上的编译文件),但我不想在 github 上部署它们......

有没有办法拥有不同的 .gitignore 文件,每个遥控器一个?

4

4 回答 4

47

这在 git 的模型中没有任何意义。提交包含文件集;所有 .gitignore 文件所做的就是告诉 UI 不要自动添加匹配某些模式的文件。这实际上意味着具有几乎相同但仅包含文件子集的并行提交集。

可以使用分支方案来执行此操作,其中您有一个“部署”分支,它从 master 中分离出来,并且是相同的,但包含额外的编译文件。这甚至可以通过 git hooks 自动编译文件并将它们添加到 repo 中。我正在设想这样的结构:

master:       A ---> B ---> C ---> D
               \      \      \      \
                \      \      \      \
deployment:      -> A'  -> B'  -> C'  -> D'

即,每次某个服务器在 master 上获得新的提交时,它都会构建项目,将构建的文件添加到 D 的新提交中,然后将其提交到部署分支——然后不必将其推送到 github。

于 2012-05-07T00:00:29.820 回答
15

我想出了一个办法来做到这一点。

就我而言,我需要将项目与 heroku 和 GitHub(作为我的公共仓库)同步。

但我对在公共存储库中共享一些带有私人信息的文件不感兴趣。

通常一个简单的项目会有以下文件夹结构

Project folder (remote heroku)
    - .git
    - .gitignore
    - (folders and files)

我所做的是再添加一个级别,并在其中创建另一个 git 存储库,其中.gitignore会省略我项目中的一些文件。

Project public (remote GitHub)
    - .git
    - .gitignore
    - Project folder (remote heroku)
        - .git
        - .gitignore
        - (folders and files)

所以这不是一个 git 存储库,它有两个不同.gitignore的远程存储库。

有两个不同的存储库。

在最里面,我只排除了 IDE 生成的文件和运行时生成的一些文件。

在最外层,我排除了所有不能公开的文件。

于 2017-04-25T20:28:55.080 回答
1

另一种选择是git submodules

例如,如果您希望您的代码和文档位于具有独立访问控制等的两个不同的存储库中,这可能很有用。因此您将拥有 3 个总存储库,一个用于文档的子模块存储库,另一个用于代码存储库,以及“ master”(不是 git 子模块)repo 包含两者(可能用于 pypi 上传)。这是组织 CS 教科书项目的一种不错的方式。这两个项目都可以在主仓库维护者的推动下独立进行,并在主要版本上同步。

于 2016-10-26T20:41:57.060 回答
1

此处提到的方法的自动化解决方案:

  1. 设置根 .git 以忽略您希望以不同方式传输的子文件夹
  2. 在子文件夹中初始化新的 git 并分配远程配置
  3. 根据传入的参数修改根文件夹的 .git/hooks/pre-push 文件以在这些子文件夹中执行 git push。
于 2017-05-02T03:48:58.850 回答