使用git权限(用于私人回购网站代码)?
这可能是关于惯例、最佳实践和/或个人偏好的问题: 所以我是一个GitNoob,我的网站代码不值得分享,所以我没有使用github之类的东西 知道git不需要中央存储库,我想:太好了,我的工作站和服务器是两个节点,我将把更改从工作站推送到服务器 开始时,代码仅在服务器上,因此我:使用git权限(用于私人回购网站代码)?,git,git-push,Git,Git Push,这可能是关于惯例、最佳实践和/或个人偏好的问题: 所以我是一个GitNoob,我的网站代码不值得分享,所以我没有使用github之类的东西 知道git不需要中央存储库,我想:太好了,我的工作站和服务器是两个节点,我将把更改从工作站推送到服务器 开始时,代码仅在服务器上,因此我: 在服务器上:git init 在工作站上:git克隆me@myserver:路径/目的地/回购 愉快地做出改变,并在当地做出承诺 在工作站上:git推送me@myserver:路径/目的地/回购 我得到了奇怪的结果。我在
git init
git克隆me@myserver:路径/目的地/回购
git推送me@myserver:路径/目的地/回购
~/repos/mysite.git
-不是公用文件夹)git推送me@myserver:repos/mysite.git
git pull~/repos/mysite.git
获取最新信息有关更多信息,请参阅Pro Git一章。无论您选择做什么,您都可能希望使用一点自动化。钩子是git将在某些事件上执行的一组脚本。这里相关的是更新后挂钩(在服务器的存储库中)。在正常回购中,挂钩位于
.git/hooks
中,因此在裸回购中,挂钩位于挂钩中。该目录当前可能包含许多示例钩子脚本(在最新版本中命名为*.sample
)。您需要制作一个名为post update
,其中包含在服务器被推送到后要执行的任何操作(例如,将cd发送到另一个repo并执行拉操作)
至于你的解决方案的细节。。。你没有挤进一个签出的分支,这样做是正确的。您所做的唯一可能的问题是,服务器最终会得到一个仅用于签出文件的存储库的额外副本。如果您决定不喜欢这样浪费磁盘空间,我很确定这会满足您的要求:
git --work-tree=/path/to/checkout-dir --bare reset --hard
这告诉git使用给定的路径作为工作目录,将其重置为正确的状态,但请记住存储库实际上是空的。我以前从未亲自做过这种事情,但它似乎在我的小测试中起作用
注意:如果您决定无论如何都要推入已签出的分支(仅当服务器上的repo永远不会用于任何操作,而只是推入并签出文件的副本时)。。。如果您完全确定这一点,可以在服务器的gitconfig中将receive.denyCurrentBranch设置为false,在服务器上执行git reset--hard
,强制其工作目录进入其应处于的状态。阅读“为什么在“git push”?“in”之后我看不到远程repo中的更改(在git Wiki上).专门为我所做的事写了一章。在问更多Git问题之前,我会先阅读ProGit。。。