git:每个远程都有不同的.gitignore文件

时间:2012-05-06 23:49:54

标签: git github gitignore

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

是否有某种方法可以使用不同的.gitignore文件,每个远程一个文件?

4 个答案:

答案 0 :(得分:36)

这在git的模型中没有意义。提交包含多组文件;所有.gitignore文件都告诉UI不要自动添加符合特定模式的文件。这实际上意味着具有几乎相同的并行提交集,但仅包含文件的子集。

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

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

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

答案 1 :(得分:4)

我想办法做到这一点。

就我而言,我需要将项目与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)

所以这不是一个带有两个具有不同gitignore的远程存储库的git存储库。

有两个不同的存储库。

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

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

答案 2 :(得分:1)

另一个选项是git submodules

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

答案 3 :(得分:1)

这里提到的方法的自动化解决方案

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