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


76

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

有什么办法可以拥有不同的.gitignore文件,每个远程文件一个?



1
哎呀,刚发现这个问题:stackoverflow.com/questions/2456533/...
opensas

@opensas,我经历了您的play 2 openshift库,偶然发现了一个相同的问题,即如何维护正常的git repo进行开发(不包括所有生成的文件),以及如何明确地进行部署(包含所有生成的文件)。到目前为止,您找到了一个好的解决方案吗?
巴基

2
Bachi:最后,我使用了一个小bach脚本,该脚本仅将while应用程序复制到另一个目录,并从那里运行openshift_deploy。也就是说,我保留了两个完全不同的git repos。我可以使用分支来完成此操作,并且每个分支使用不同的.gitignore,但我认为这种方法更干净。此外它更容易处理/缩小在部署之前的JS文件
opensas

@opensas对不起,在这里碰到一个非常老的话题,但是对于每个分支,您将如何使用不同的.gitignore文件呢?我试图弄清楚自己...
旋转

Answers:


40

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

使用分支方案可以做到这一点,在该方案中,您有一个“部署”分支,该分支与master分离,并且相同,但是包含其他编译文件。这甚至可以通过git hooks自动实现,以自动编译文件并将其添加到仓库中。我正在构想这样的结构:

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

即,每当特定服务器在master上获得新提交时,它都会构建项目,将构建的文件从D添加到新提交中,然后将其提交到Deployment分支-然后不必将其推送到github。


4
好主意,我没想到回合使用不同的分支,每个分支都有自己的.gitignore
打开时间为

12

我想出一种方法来做到这一点。

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

因此,这不是具有两个具有不同gitignores的远程存储库的git存储库。

有两个不同的存储库。

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

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


1

另一个选择是git submodules

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


1

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

  1. 将根目录.git设置为忽略要传输的子文件夹
  2. 在子文件夹中初始化新的git并分配远程配置
  3. 修改根文件夹的.git / hooks / pre-push文件,以根据传入的参数在那些子文件夹中执行git push。

1
我最终自己做。如果您真正想要自动化。使该文件夹成为临时文件夹,并cd ..; rm -rf temp_folder;在推送后将其删除。 github.com/MichaelDimmitt/publicize_readme/blob/master/... github.com/MichaelDimmitt/publicize_readme/blob/master/...
迈克尔Dimmitt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.