在存储库中将某些文件设为私有

Mar*_*son 4 git github

我不想托管我在Github上的公共存储库中创建的网站的源代码.我不想公开,所以我也可以向其他人显示源代码,但是有些文件我不想保密.可能包含密码等的文件(例如连接到数据库时).有没有办法做到这一点?

ade*_*hox 12

尽管正如@aspyct 所解释的那样,将密码保存在存储库中是一种不好的做法,但我想补充一点,并非所有人可能想要在存储库中保密的所有内容都是密码,例如,人们可能想要开发新功能但不公开直到它完成(或者可能永远不会暴露它)。

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

  1. 创建两个具有不同名称的远程存储库(在 GitHub 或 BitBucket 或其他任何地方),例如:一个myrepo和另一个privates.myrepo。使myrepo公共存储库和privates.myrepo私有存储库。
  2. 在本地,启动单个 git 存储库:git init.
  3. 现在在存储库中添加非私有文件并进行初始提交。
  4. 将此存储库连接到公共远程:
git remote add <remote_branch_name> <remote_repository_address>
Run Code Online (Sandbox Code Playgroud)

在我们的例子中,它变成:

git remote add origin https://github.com/<YOUR_USERNAME>/myrepo.git
Run Code Online (Sandbox Code Playgroud)
  1. 推: git push -u origin master

  2. 现在向本地存储库添加一个分支并切换到它: git checkout -b private_work

  3. 重要的一步来了:将这个分支连接到另一个远程,即私有的。在我们的例子中:
git remote add privates https://github.com/<YOUR_USERNAME>/privates.myrepo.git```
Run Code Online (Sandbox Code Playgroud)
  1. 接下来,将私有文件添加到本地存储库并进行提交。
  2. private_work分支推送到privates远程:git push -u privates private_work

在此处阅读有关其工作原理的更多解释:https : //24ways.org/2013/keeping-parts-of-your-codebase-private-on-github/。我也从他那里学到了这一点。

在此处查看所有这些步骤的很酷的终端显示记录:http : //showterm.io/04130676d3401229e7df6

此外,您可以像alias private_push='git push -u privates private_work在启动脚本中一样添加别名.bashrc,以防您在 Linux 上,以降低将私有工作错误推送到公共存储库的机会。

哈。


asp*_*yct 10

我看到三个选择:

  1. 要么将这些文件添加到您的文件中.gitignore,请不要将它们提交到存储库中.您可以选择为这些文件提供模板(类似config.php.example),供其他人自定义.这样,他们可以保持配置并轻松地进行更改.

  2. 或者将这些文件放在存储库之外,并使用相对路径引用它们. define('CONFIG_DIR', '../config/');

  3. 或者你把这些文件放在一个git子模块中.虽然这会有点长;)

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

我在许多项目中成功使用了选项2,它只是有效,但用户不太友好.

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

  • +1建议将敏感文件存储在非版本化文件夹中(恕我直言,子模块不是一种解决方案,**永远不要**包含密码或敏感信息的版本文件)。我个人使用选项 1,有一个版本化的配置文件,其中包含一个包含敏感配置设置的非版本化文件([示例](https://github.com/mattoufoutu/EventViz/blob/30f986de65e112af8128366be4725b438eeebf16/eventviz/settings .py#L19) 使用Python应用程序,这里敏感信息是用于签署cookie的密钥) (2认同)