Git拉取但从不推送文件

18

我没有找到与此特定相关的内容,但如果我漏掉了,请告诉我。

我在git中有一个需要存在的文件。每个人拉取后都需要编辑它以添加自己的凭据。当个人编辑时,我不希望它显示为已更改或任何其他情况,因为我们希望在存储库中保留不带凭据的通用文件。是否有选项可以将文件设置为“拉取此文件但永远不推送”? 当前的设置是文件名为Upload.bat_COPY_EDIT_RENAME,这样就可以清楚地知道该怎么做,并且我在.gitignore中有Upload.bat。我希望有某种更傻瓜化的方法。

我知道有像--assume-unchanged这样的选项,但我不想每次都运行它,而且它似乎有点像临时解决方案,可能会在以后出现问题。

谢谢您的帮助!

4个回答

5
我建议采取稍微不同的方法...您可以编写Upload.bat以使用您选择的格式从设置文件中读取。比方说,您可以将其称为secrets.txt。然后,您可以将secrets.txt添加到您的.gitignore中,并毫不犹豫地提交Upload.bat。当用户获取repo时,他们会得到Upload.bat并可以创建自己的secrets.txt
您可能希望让secrets.txt只包含用户名和密码,用换行符分隔即可。这样解析应该很容易。

我不确定我们是否在寻找如此复杂的解决方案,但这将解决我们所面临的问题,即我们的三个仓库(Dev、UAT、Prod)有不同的Upload.bat文件,而编辑每个文件需要耗费大量时间,特别是在首次使用该环境时。 - GRobb

2
如果每个人都要重命名文件,你可以将Upload.bat*添加到.gitignore文件中,这样git就不会跟踪任何符合该命名方案的新文件。有关更多信息,请参见gitignore

假设当他们重命名时,会将其重命名为Upload.bat_myname或附加Upload.bat的其他名称。 - DeveloperDemetri
他们正在编辑文件的实际内容,然后将文件重命名为“Upload.bat”。理想情况下,我只需要在git中拥有“Upload.bat”,它会被拉取下来进行编辑,但永远不会被推回去。 - GRobb
如果要拉取的通用文件是Upload.bat_COPY_EDIT_RENAME,则只需将“Upload.bat”(末尾没有通配符)放入.gitignore中(假设git尚未跟踪该确切文件名),它应会忽略已重命名为“Upload.bat”的文件,同时保留 Upload.bat_COPY_EDIT_RENAME。确保在包含该文件的任何提交之前,Git正确地忽略该文件。 - DeveloperDemetri
是的,但理想情况下,我甚至不希望“Upload.bat_COPY_EDIT_RENAME”文件存在。实际上,我只想在repo中有“Upload.bat”,并附加一些规则告诉git忽略对该文件的任何更改,并且不要推送。你刚才描述的正是我目前设置的方式,如果可能的话,我希望有一个更简化的方法。 - GRobb

2
据我所知,Git 没有一个永久的设置可以拉取文件,但不推送它。
您可以通过将模板文件存储在 Git 中(就像您已经做的那样),并让您的构建脚本(您已经拥有了一个,对吗?)检查定制文件是否存在来获得更可靠的解决方法。如果定制文件存在,则继续构建。如果不存在,则提示开发者输入他们的凭据并设置该文件。然后继续构建。当然,定制版本的文件在 .gitignore 文件中。
这本质上就是您现在所拥有的,但增加了一个构建脚本为开发者提供提醒的功能,而不是依靠健忘、糊涂的人希望他们能注意到和理解某个有趣名称的文件在其文件系统的某个地方。
让脚本处理定制文件的创建的另一个好处是,如果模板发生更改,它可以自动更新。
根据凭据,您可能需要仔细检查以确保在运行构建脚本时不会记录任何日志。这包括将输出导入文件。

1

一种不需要将Upload.bat添加到gitignore的方法是使用批处理文件包含。

您可以添加一个名为credentials.txt.dist的文件到存储库中,其内容如下:

username=username_here
password=password_here

然后,在您的批处理文件中:

for /f "delims=" %%x in (credentials.txt) do (set "%%x")

无耻地从批处理文件包含外部文件以获取变量中摘取

并且没有经过测试 :)

批处理脚本应该进行一些错误检查。至少,如果未提供credentials.txt,它应该生成一个描述性错误消息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接