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 更改以这种方式保存。
如果有人有更好的答案,我会很高兴听到。
我有我的本地 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 更改以这种方式保存。
如果有人有更好的答案,我会很高兴听到。