Git,丢失从 ftp 上传到实时的更改

Git, losing changes from ftp upload to live

我有我的本地 Git 存储库和一个远程存储库(集线器)。我使用 post-update 挂钩将我的项目 (/home/user/projects/website.com) 复制到 public_html 内的 apache git 存储库中。我已经按照本教程进行操作:using-git-for-deploymen。下面是我的 post-更新。我遇到了与第一种方式冲突的问题(当将项目从远程(集线器)复制到实时、简单的副本时,我需要自动解决冲突)但第三种方式工作正常:

#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".

echo
echo "**** Pulling changes into Live [Hub's post-update hook]"
echo

cd /home/user/website.com/public_html || exit
unset GIT_DIR

# 1st way: simple point head into hub
#git fetch hub master 2>&1
#git reset --hard FETCH_HEAD 2>&1
#git clean -df 2>&1

# 2nd way: merge (you may have conflicts)
#git fetch hub master 2>&1
#git reset --hard master 2>&1
#git pull --rebase hub master 2>&1

# 3rd way: Combining the above 
git fetch hub master 2>&1
git reset --hard FETCH_HEAD 2>&1
git pull --rebase hub master 2>&1

# allow write permission to group
chmod -R g+w public_html/

exec git update-server-info

到目前为止一切正常,但是本教程中描述的 post-commit inside live repo 不起作用,当我直接从 ftp 进入实时站点时,我正在丢失更改。 我所需要的只是每次从本地 git 回购中拉取时,一个进入实时回购的钩子,从远程拉入实时,提交从 ftp 访问到实时中所做的更改,将它们推送到远程,然后将远程拉入本地仓库。我已经在我的项目远程仓库(集线器)中尝试 post-merge hook 来做到这一点,但是我有冲突并且没有按预期工作。这是我的 post-merge:

#!/bin/sh
#
# An example hook script that is called when a git pull is done
# on a local repository.
#
# To enable this hook, rename this file to "post-merge".

echo
echo "**** pushing changes from Live to Hub [Hub's post-merge hook]"
echo

cd /home/user/website.com/public_html || exit
unset GIT_DIR

## fetch hub's data ##
git fetch hub master 2>&1
#git merge master
git reset --hard master 2>&1
git pull --rebase hub master 2>&1

## Push changes ##
git add -A
git commit -m "Changes from Live"
git push hub master 2>&1

## Change group permissions ##
chmod -R g+w public_html/

# exec git update-server-info
# : Nothing

每次我 运行 post-merge 我都会在推送时收到这条消息:

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to '/home/git/Sites/trofodosies24.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'Note about
fast-forwards' section of 'git push --help' for details.

我做错了什么?请帮忙。

我尝试了很多东西,this link非常有用。经过多次测试,我找到了解决方案。我只使用一个连接到集线器(远程)的钩子,post-update:

#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".

echo
echo "**** Pulling changes into Live [Hub's post-update hook]"
echo

## Go into Live ##
cd /home/user/website.com/public_html || exit
unset GIT_DIR

## Commit changes form Live ##
git checkout master
git add -A
git commit -m "Changes from Live 2"

# 1st way: simple point head into hub
#git fetch hub master 2>&1
#git reset --hard FETCH_HEAD 2>&1
#git clean -df 2>&1

# 2nd way: merge (you may have conflicts)
git fetch hub master 2>&1
git reset --hard master 2>&1
git pull --rebase hub master 2>&1

# 3rd way: Combining the above
#git fetch hub master 2>&1
#git reset --hard FETCH_HEAD 2>&1
#git pull --rebase hub master 2>&1

## Merge Remote and Live  Or rebase local commits on top instead ##
#git merge hub master
#git rebase hub master

## Push the results ##
git push hub master 2>&1

# allow write permission to group
chmod -R g+w public_html/

exec git update-server-info

它现在有效,将来...我不知道。 缺点是当从本地 repo 进行推送时,提交到 Live repo(从 ftp 更改)并且提交放在它之上。然后 Live repo 通知集线器(远程)。本地 git 客户端不知道 ftp 提交,直到他在推送之后进行拉取。至少 ftp 更改以这种方式保存。

如果有人有更好的答案,我会很高兴听到。