我刚接到一份新工作,我的一个责任就是管理一些运行PF作为数据包过滤解决方案的FreeBSD盒子。防火墙曾经由一个人管理,但现在我们有3个人可能同时修复相同的配置文件。我想使用git能够处理本地副本中的更改请求,并在完成后将更改推送到服务器。这将给我:版本控制,快速回滚和冲突管理。 我启动了一个虚拟机进行测试,这是我到目前为止所做的。
在git init
和/etc
内运行/usr/local/etc
在本地回购中git clone
内/usr/home/myusername/config_sync/
:
git clone -l /etc etc@localhost<br>
git clone -l /usr/local/etc usr_local_etc@localhost<br>
多数民众赞成我认为我能做的事情:
更改pf.conf;
运行git add pf.conf;
运行git commit -m 'comment'
运行sudo git push
但这就是正在发生的事情。虽然我没有更改/ etc中的pf.conf文件中的任何内容,但git会确认远程提交,但认为本地副本是一个较新的版本,可以撤消我所做的一切。
例如,如果我添加&#39; #test&#39;在我的工作副本内部并将其推送到/ etc,这是sudo git diff master将在/ etc中显示的内容。
diff --git a/pf.conf b/pf.conf<br>
index 31c4c68..76d693b 100644<br>
--- a/pf.conf<br>
+++ b/pf.conf<br>
@@ -1,5 +1,5 @@<br>
#MACROS<br>
-#test<br>
#Hello from origin#<br>
##Firewall Interfaces<br>
答案 0 :(得分:0)
这是因为当您在/ etc中推送到repo时,您的更改将进入存储库而不是工作副本。推送更改后,您必须检查存储库分支中的最新文件,否则上游存储库中的工作副本将无法更新。
在/ etc中有一个主仓库,在/ home / me / etc_clone中有一个克隆,你的工作流程可能是这样的:
$ cd /home/me/etc_clone
$ vim pf.conf #make changes
$ git add pf.conf
$ git commit -m "updates"
$ sudo git push
$ cd /etc
$ sudo git checkout -- . #sync working copy with index