Eds*_*ina 7 git macos macports bitbucket msysgit
当我运行git pull时,我得到了:
edson$ GIT_TRACE=1 git pull -v
trace: exec: 'git-pull' '-v'
trace: run_command: 'git-pull' '-v'
trace: built-in: git 'rev-parse' '--git-dir'
trace: built-in: git 'rev-parse' '--is-bare-repository'
trace: built-in: git 'rev-parse' '--show-toplevel'
trace: built-in: git 'ls-files' '-u'
trace: built-in: git 'symbolic-ref' '-q' 'HEAD'
trace: built-in: git 'config' 'branch.master.rebase'
trace: built-in: git 'config' 'pull.rebase'
trace: built-in: git 'rev-parse' '-q' '--verify' 'HEAD'
trace: built-in: git 'fetch' '-v' '--update-head-ok'
trace: run_command: 'ssh' 'git@bitbucket.org' 'git-upload-pack '\''xxxltd/xxxltd.git'\'''
trace: run_command: 'rev-list' '--objects' '--stdin' '--not' '--all' '--quiet'
trace: run_command: 'rev-list' '--objects' '--stdin' '--not' '--all'
trace: exec: 'git' 'rev-list' '--objects' '--stdin' '--not' '--all'
trace: built-in: git 'rev-list' '--objects' '--stdin' '--not' '--all'
From bitbucket.org:xxxltd/xxx
= [up to date] master -> origin/master
= [up to date] blah -> origin/blah
trace: run_command: 'gc' '--auto'
trace: exec: 'git' 'gc' '--auto'
trace: built-in: git 'gc' '--auto'
trace: built-in: git 'rev-parse' '-q' '--verify' 'HEAD'
trace: built-in: git 'fmt-merge-msg'
Run Code Online (Sandbox Code Playgroud)
但随后它就挂在那里了。
(bitbucket)存储库位于Windows 7 vmware计算机中。然后,通过SMB将存储库共享到主机(mac osx)。我在主机上运行git pull(macports)。
如果我在vm中运行git pull(msysgit),它可以正常工作。
有什么线索吗?
在 Git 源代码中,当从 Mavericks 访问存储库位于 SMB 共享中时,Git 的 fmt-merge-msg 函数中似乎存在无限循环。我能够解决此问题的唯一方法是执行一个不涉及自动合并的过程。
git pull本质上是一个git fetch && git merge多合一命令。git fetch如果您在发生更改时尝试对当前分支进行操作,则可能会遇到git fetch失败的问题。
我解决此问题的方法是将远程分支提取到临时本地分支中,然后将该临时分支合并到您的工作分支中。请参阅以下详细信息,尝试将最新更改从您的origin/master当前工作分支中获取master。
origin master从名为 的本地分支中获取最新更改master_merge_tmp。git fetch [<remote loc>] [<remote branch>]:[<local branch>]允许您在不自动调用的情况下获取最新更改fmt_merge_msg,并且您可以针对不同的本地目标分支:
git fetch origin master:master_merge_tmp
Run Code Online (Sandbox Code Playgroud)将master_merge_tmp分支合并到master:
git merge master_merge_tmp
Run Code Online (Sandbox Code Playgroud)通过删除远程分支来执行一些清理mater_merge_tmp:
git branch -D master_merge_tmp
Run Code Online (Sandbox Code Playgroud)或者,您可以创建一个辅助函数来自动执行上述步骤。您可以将其放在您的.bashrc或中.zshrc:
# Workaround for fmt-merge-msg issue on Mavericks w/SMB repo
# gfm [<remote>] [<remote branch>]
function _git-fetch-merge() {
local remote="$1"
local branch="$2"
local tmp_branch="${2}_merge_tmp"
git fetch $remote $branch:$tmp_branch
git merge $tmp_branch
git branch -D $tmp_branch
}
alias gfm="_git-fetch-merge"
Run Code Online (Sandbox Code Playgroud)
现在,您可以从终端执行以下操作:
_git-fetch-merge origin master
Run Code Online (Sandbox Code Playgroud)
或者您可以使用别名:
gfm origin master
Run Code Online (Sandbox Code Playgroud)
如果您正在使用远程上游分支:
gfm upstream master
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1889 次 |
| 最近记录: |