有一种方法可以使用git管理我的部署和开发工作流程,但不包括历史记录中的敏感数据(示例数据库,秘密令牌等等)?我需要有更多的分支(ex master,staging和production?)我问这个因为有一天,一个项目可以成为开源的,将git的历史记录或从部署到生产的敏感数据排除非常有用服务器,当然我总是可以删除.git文件夹..但是对于项目的原始历史可能非常有用..所以我怎么能避免这个问题呢?谢谢大家。
答案 0 :(得分:0)
您可以创建一个名为.gitignore
的文本文件,并将其保存到项目目录中。在那里你必须写出你不希望Git跟踪的所有文件/扩展名。您甚至可以使用正则表达式,例如*,它将代表所有文件。即:
projectfilename/.gitignore
somefile.txt
*.php --> will ignore all files with the extension of PHP
有关.gitignore的更多信息,您可以结帐https://git-scm.com/docs/gitignore
答案 1 :(得分:0)
首先,摆脱敏感数据。它在您的代码存储库中没有位置。将您的密码,主机名等传输到存储库外部的配置文件(当然,您将在里面有一个示例/模板)。
它不会轻易发生。理论上,您可以执行批处理操作,该操作基本上会遍历整个提交历史记录并创建"镜像提交",其中每个人都有一些脚本删除了秘密。对于任何非平凡的大小(特别是如果你还想保留分支而不仅仅是主时间轴),这将是有趣的"至少可以说。
这个策略的大纲是:
repA
上的第一次提交。repB
。cp
工作目录(不包括repA
)的全部内容复制(使用.git
)到空的repB
工作目录。repB
中,执行git add -A ; git commit -m XXX
,其中XXX是来自repA
的原始提交消息。如果repA
中有任何引用当前提交的引用(标记或分支),则在repB
中创建。repA
中查找当前提交的所有子提交。如果你只有一个时间线就足够了(即每次提交只有一个孩子,全部都在master
分支上),那么这并不难,也很可行。
如果你想获得你的分支,你也可以这样做,同样的逻辑,只是递归到每个点的所有孩子。跳过除master
之外的任何分支的合并提交;对于master
,如上所述提交您的合并提交(不要试图使它们成为"真正的"合并)。
如果您想要合并,那么它会变得疯狂,因为您将不得不再次执行任何和所有冲突解决方案。忘了那个。
我为单个分支完成了类似的事情;它有效,但一旦你解决冲突,它就不值得麻烦了。它是一种跨越整个存储库的巨型自动git rebase -i
。
相反,创建一个新的repsitory,复制旧存储库的第一个状态,不再包含你的秘密,并提交。完成。你失去了所有旧的历史。
由于这个原因,你可能也不想要这个。
所以你的资料库中有秘密。那么,密码可以改变。更改密码并完成密码。不过,介绍一下配置文件,但不要为历史烦恼。
答案 2 :(得分:0)
您可以撰写.gitignore
个文件,其中包含您不希望git
跟踪的文件。例如,假设我想确保git
不跟踪日志文件
我可以创建一个.gitignore
文件并编写类似
logs/*.log
然后add
和commit
.gitignore
文件和git
将停止跟踪logs
文件夹*
所有.log
文件} extension。
以下是一些排除模式
video.mp4 # git will not track this particular file
*.mp4 # git will not track files with *.mp4 extension
folder/ # git will not track this file
希望你明白这个想法
答案 3 :(得分:0)
最好的办法是将任何敏感文件添加到.gitignore文件中。
在环境之间移动时,您需要设计一种方法来重新添加这些文件(如果它只有1或2个文件 - FTP就足够了)。
或者,在您的应用程序中构建一个例外,它会丢失文件,并根据用户输入自动生成它们。
如果您曾经使用过Git的WordPress,那么您已经体验过这一点。 WordPress有一个名为wp-config.php的配置文件 - 它包含所有数据库连接信息。显然,这是你不想分享的东西(而且它也可能在开发环境之间发生变化)。
结果 - 版本控制中忽略了wp-config.php。将WordPress部署到新环境时,它会检测到wp-config.php不存在,并生成新版本;在询问数据库信息之后。
希望这有帮助。
答案 4 :(得分:0)
一种方法是将所有敏感数据保存在项目的子文件夹中。然后可以使用git子模块或git子树管理此子文件夹。如果您的项目与将敏感数据保存在一个文件夹中不兼容,则可以将其存储在单个文件夹中,并使用Makefile / script / etc将敏感数据复制到所需位置和.gitignore以防止将其检入git