我正在与Rails API资源库上的团队合作,我们有一个.env文件,其中包含我们的环境变量。该文件包含在.gitignore文件中,因为环境变量包含敏感令牌,我们不想将其检入版本控制或推送至Github。
当我遇到与那些环境变量有关的bug时,这会带来一个问题。团队中的每个人似乎在本地设置中使用的环境变量集略有不同(或有时大不相同)(长话说,我知道这是根本原因,需要进行更改,但是作为一名新顾问,我的能力有限现在可以更改此功能。
我想到的一个短期解决方法是建立一个没有git的本地git存储库,仅用于.env文件(以及不应推送到远程master的任何类似文件)。至少这将使我能够回滚,检查差异以查看确切的更改,并阅读提交消息以提醒有关更改原因。但是,由于已经有了一个git存储库,可以跟踪大多数代码库的更改,因此我不确定是否可以创建第二个存储库。
我读了this post,但在涉及.gitignore文件时,似乎遇到了同样的问题。
我也考虑过使用git子模块,但是这些子模块仅用于子目录吗?如果两个.git/
文件夹是同一个目录中的兄弟姐妹,它们也可以工作吗?
答案 0 :(得分:1)
毫无争议(我认为)和不可争议(我认为):
结论:您至少需要两个VCS和/或存储库。
第二个VCS也可以是Git,只要您确定不分发(至少以公共方式)第二个存储库即可。
子模块可以工作。子模块不过是对其他Git存储库的引用:本质上是URL和一个特定的提交哈希ID。但是,每个Git存储库都控制自己的工作树。如果必须将文件混合在一起(“位于同一文件夹中”),并且仍然要使用子模块,则有两种选择:
请注意,如果您选择使用子模块,则可能希望将其构造为一个单独的超级项目,除了保留两个子模块(保留感兴趣的提交)之外,该项目什么都不做符号链接(如果您在此处使用最后一种方法)。这使得两个子模块完全相互独立,因为一个子模块不了解其超级项目。只有 third 存储库(超级项目)才知道还有两个其他的Git存储库,并且是由超级项目将子模块安排在相对符号链接的位置(如果使用的话)工作。
如果那太过分了,只需选择两个独立的Git存储库之一作为超级项目。另一个Git存储库将被克隆为超级项目的子目录。
假设存储库A的提交仅包含公共文件,而存储库B的提交仅包含私有文件。克隆A
和B
时,会得到两个不同的工作树。其中最多可以是path/to/files
,但是您希望A 和 B中的文件都出现在path/to/files
中。如果A的工作树名为path/to/files
:
cd path/to; git clone url-of-A files
然后B的工作树肯定不是 path/to/files
,并且从B
不会检出的文件最初出现在{{ 1}}。举例来说,假设B根本不是一个子模块,而您现在仍在path/to/files
中运行:
path/to
您现在拥有git clone url-of-B sensitive-files
(已将Git-repo克隆到files/*
中)存储了从存储库A提取的文件,files/.git
保留了从存储库B提取的文件。您现在可以手动操作,或使用脚本,复制或符号链接在sensitive-files/*
中管理的文件,以便可以通过格式为sensitive-files/*
的名称来访问它们。
可以在files/*
中列出出现在files/*
中的副本或符号链接,以使它们不会添加到回购A的提交中。或者,如果您正在使用符号链接,请注意,files/.gitignore
中的内容实际上只是路径名 A/sensitive-file-1
。即使可以从任何地方访问repo A,也可以将 symlink 提交给repo A,因为无论谁获得它的副本,都只知道A中的程序可以读取和/或写入到名为../sensitive-files/sensitive-file-1
的文件。该文件的实际内容不在sensitive-file-1
中,而是在path/to/files
中,因此它们根本不会出现在存储库A中。
答案 1 :(得分:1)
Git不需要将存储库或其工作树放在任何特定位置。您可以将其指向您正在使用的特定工作树和/或存储库,而不是查找它们而将使用它们。
因此,请保持原始存储库不变,并为您的.env
文件保留边带存储库。
git init ~/orts.git
git config --global alias.orts '!git --work-tree "$PWD" --git-dir ~/orts.git'
然后您可以做
git orts add .env
答案 2 :(得分:0)
我们有一个.env文件...我们不想签入版本控制
所以...您有一个文件希望保持同步,但是不要不想使用版本控制。那么,使用其他东西吗?共享文件系统或小型网站。哎呀,如果没有路由器,那么简单的FTP就能解决问题。
您可以加密文件。
环境变量包括敏感令牌
这是我要重新考虑的部分,因为它很奇怪。真正敏感的数据永远不会在环境中。