Git 使存储库中的某些文件成为私有文件

Git 使存储库中的某些文件成为私有文件,git,github,Git,Github,我想为我在Github上的公共存储库中创建的网站托管源代码。我希望它是公开的,这样我也可以向其他人显示源代码,但是有些文件我希望保持私有。可能包含密码等内容的文件(如连接到数据库时)。有办法吗?我有三种选择: 要么将这些文件添加到.gitignore,要么将其提交到存储库中。您可以选择为这些文件提供模板(类似于config.php.example),供其他人自定义。这样,他们就可以保持配置并轻松获取更改 或者将这些文件放在存储库之外,并使用相对路径引用它们定义('CONFIG_DIR','..

我想为我在Github上的公共存储库中创建的网站托管源代码。我希望它是公开的,这样我也可以向其他人显示源代码,但是有些文件我希望保持私有。可能包含密码等内容的文件(如连接到数据库时)。有办法吗?

我有三种选择:

  • 要么将这些文件添加到
    .gitignore
    ,要么将其提交到存储库中。您可以选择为这些文件提供模板(类似于
    config.php.example
    ),供其他人自定义。这样,他们就可以保持配置并轻松获取更改

  • 或者将这些文件放在存储库之外,并使用相对路径引用它们<代码>定义('CONFIG_DIR','../CONFIG/')

  • (不推荐,子模块是硬的)或者将这些文件放在git子模块中。不过时间会长一点;)

  • 作为参考,Symfony框架(PHP)使用第一个选项并提供配置模板

    我已经在许多项目中成功地使用了选项2,它只起作用,但不太友好


    从未在这种情况下使用选项3,子模块可能不是最好的工具。但是它可以工作…

    我也遇到了同样的问题,并且使用了aspyct解决方案中的#1。我的项目和你的一样是开源的,但也有一些部分包含敏感信息。我做了以下工作:

  • 已将文件夹添加到我的项目(在visual studio中)
  • 将该文件夹添加到我的
    .gitignore
  • 在该文件夹中创建了一个文本文件,该文件包含在git和visual studio中
  • 将私有回购克隆到子文件夹中

  • 这样,来自github或在visual studio中查看的任何人都会发现文件丢失,文本文件向他们展示了如何在没有敏感文件的情况下构建应用程序。

    尽管如@aspyct所述,在存储库中保存密码是一种不好的做法,我想补充一点,并非所有存储库中可能需要保密的内容都是密码,例如,可能需要开发新功能,但在完成之前不公开(或者可能永远不公开)

    在这些情况下,我们可以创建两个远程存储库,这两个存储库都与同一个本地存储库关联,但每个存储库对应一个不同的分支。这里有一个逐步的说明:

  • 创建两个具有不同名称的远程存储库(在GitHub或BitBucket上或其他任何地方),例如:一个
    myrepo
    ,另一个
    privates.myrepo
    。将
    myrepo
    设置为公共存储库,将
    privates.myrepo
    设置为私有存储库
  • 在本地,启动一个git存储库:
    gitinit
  • 现在将非私有文件添加到存储库中,并进行初始提交
  • 将此存储库连接到公共远程服务器:
  • 接下来,将私有文件添加到本地存储库并进行提交
  • private\u work
    分支推送到
    privates
    remote:
    git Push-u privates private\u work

  • 请在此处阅读有关其工作原理的更多说明:。我也从他那里学到了这一点

    请参见此处的“酷终端秀”记录所有这些步骤:

    此外,如果您在Linux上,还可以在启动脚本(如
    .bashrc
    )中添加别名(如
    alias private\u push='git push-u privates private\u work)
    ),以降低将私人工作错误推送到公共存储库的可能性


    HTH.

    +1建议将敏感文件存储在无版本连接的文件夹中(imho中的子模块不是解决方案,不应将包含密码或敏感信息的文件版本化)。我个人使用选项1,有一个版本连接的配置文件,其中包括一个非版本连接的文件,其中包含敏感配置设置(对于Python应用程序,这里敏感信息是用于签署cookie的密钥),非常感谢您提供的信息!我想我会选择选项1,忽略包含敏感信息的文件的版本控制。
    git remote add <remote_branch_name> <remote_repository_address>
    
    git remote add origin https://github.com/<YOUR_USERNAME>/myrepo.git
    
    git remote add privates https://github.com/<YOUR_USERNAME>/privates.myrepo.git```