我有一个非常具体的需求,我无法让它工作,因此我转向你,Git和Stack Overflow的朋友们。
我的服务器上运行了我的实时网站。我希望使用Git更新网站。为了避免实时测试,我希望在同一台服务器上设置一个测试环境,可以通过子域访问,就像开发文件夹是master的一个分支一样。
据我所知,你不能在不同的文件夹中有分支,这是有道理的。相反,我将实时存储库克隆到另一个文件夹中。从我的家用计算机,我推送到开发存储库的一个功能分支,在那里我将它与“远程”主分支合并,然后将合并推送到实时服务器。
不幸的是,当我尝试将我的开发大师推送到主服务器时,git log
确实提到了新的提交,但文件保持不变。 This question似乎相关,但没有答案解决了我的问题。
我的所作所为(按时间顺序排列)
~/www $ git init
~/www $ git touch file.txt
(并填写)~/www $ git add .
~/www $ git commit -m "Initial commit"
~/dev $ git clone ~/www .
~/dev/file.txt
~/dev $ git add .
~/dev $ git commit -m "Dev commit"
~/dev $ git push
检查~/www/file.txt
时,没有任何变化:(
git log
(原始存储库)中的~/www
命令 显示提交:
commit 677fed22f18d2a98c9b03fc4256c2ef78bd68e8d
Author: Tim Severien <tim********@gmail.com>
Date: Sat Feb 14 16:36:38 2015 +0100
Dev commit
commit 7dd9b40dd29a63ba8ea7d647b4afd575f2376659
Author: Tim Severien <tim********@gmail.com>
Date: Sat Feb 14 16:35:39 2015 +0100
Initial commit
答案 0 :(得分:1)
推动非裸机回购有点不寻常。并不是说它不起作用,但是,正如你注意到的那样,它可能有点微妙。此外,执行此操作,您可以在Web服务器上获得项目的完整历史记录。它本身并不是一个问题,但它似乎在不必要地浪费空间。
如果要为您的回购添加deploy.sh
脚本呢?例如,它可以像
cp -r . ~/www
第一个优点是它可以解决您的推送问题。另一个优点是你可以让它发展,因为你会发现其他需求。例如,第二次迭代可能看起来像
INITIAL_SHA1=$(git rev-parse HEAD)
SHA1_TO_DEPLOY=$1
DEPLOY_ENVIRONMENT=$2
git checkout $SHA1_TO_DEPLOY
if ! ./runTests.sh; then
echo Commit $SHA1_TO_DEPLOY is corrupted. Won't deploy it
else
cp -r . $DEPLOY_ENVIRONMENT
fi
git checkout $INITIAL_SHA1
当然,这不是您问题的直接答案,但我相信它可能会满足您的需求。
答案 1 :(得分:0)
HEAD
与索引和工作树通过在receive.denyCurrentBranch
生成的存储库中将ignore
设置为~/www
,您可以将其推送到已检出的分支(master
,此处),这使HEAD
与索引和工作树不同步。
receive.denyCurrentBranch
如果设置为
true
或"refuse"
,git-receive-pack
将拒绝参考更新 非裸存储库的当前已检出分支。 这样的推动 是有潜在危险的,因为它使HEAD与...不同步 索引和工作树。 [...]如果设置为false
或"ignore"
,允许这样的推送没有消息。 [...]
(我的重点)
尝试运行
$ git diff
$ git diff --cached
diff --git a/file.txt b/file.txt
index ce01362..e69de29 100644
--- a/file.txt
+++ b/file.txt
@@ -1 +0,0 @@
-hello
~/www
中的。请注意,git diff
不输出任何内容,证明工作树和索引是同步的,而git diff --cached
显示HEAD
与索引之间的差异。
Andrew C在his comment中指出,
推送到非裸存储库中的签出分支通常不是您想要的
......出于上述原因。
您应该重新考虑您的工作流程并避免这种情况。问题Push to a non-bare Git repository及其答案应该与此相关。