我的GIT存储库位于/var/repo/myRepo.git
。我设置了一个GIT钩子post-receive*
来将文件从我的存储库复制到我项目的文件夹
git --work-tree=/var/www/laravel --git-dir=/var/repo/myRepo.git checkout -f
每次我在服务器上提交并推送某些内容时,文件var/www/laravel/config/services.php
都会被替换,我在服务器上所做的修改将替换为我的本地副本。
例如,如果我手动修改以下文件,如服务器上的 (通过ssh会话)
This is the modified content of this file
在提交和推送之后会是这样的
This is the default content of this file
我尝试将/config/services.php
添加到.gitignore
,但似乎无效。
/node_modules
/public/storage
/public/hot
/storage/*.key
/vendor
/.idea
Homestead.json
Homestead.yaml
.env
/config/services.php
我应该怎么做才能在每次在服务器上提交内容时不替换此文件?
答案 0 :(得分:0)
我应该怎么做才能在每次在服务器上提交内容时不替换此文件?
您只有两个选择:
你的git checkout -f
命令意味着"给我最新的提交,覆盖一切。"如果最新提交具有新版本的文件,则会覆盖该文件的旧版本。
(此外,.gitignore
文件并不代表您认为的含义。它不是忽略的文件列表。它是一个文件列表 - 或名称模式 - 不要抱怨。通常最重要的是,它允许你向Git声明:"是的,我知道这些是在我的工作树中,而不是在我的索引中;不要#39;告诉我。"它在输入端 - 即,"不要检查它"部分。)
这导致了关于可配置软件的一般规则,其中软件本身是在Git中维护的,或者实际上是任何版本控制系统:不要将配置放入版本控制系统。 配置不是软件的一部分。
例如,考虑一下Git本身。您必须配置 Git,告诉您user.name
和user.email
,以便使用您的用户名和电子邮件地址进行提交。现在假设Git带有其软件内置的配置文件,表示您的用户名是Fred,您的电子邮件是fred@fred.fred
。 每当您将Git更新为新版本时,它都会将您的名称更改回" Fred< fred@fred.fred>"。这不是很友好,是吗?
Git将您的配置存储在Git软件的之外。可以肯定的是,默认配置条目,但你设置的任何内容都保存在其他地方。更新Git不会触及这个。这不是特定于Git,甚至是版本控制系统:提供升级的任何系统不得将其配置存储在升级销毁的文件中。
所以,停止这样做。
答案 1 :(得分:0)
我做了git rm /config/services.php
并手动重新导入了该文件。现在该文件不会被GIT取代。