Luk*_*uke 8 git version-control xcode locking xcode7
我使用了一些Xcode的源代码控制功能,特别是主编辑器中的blame功能,但是在命令行中使用git来实现我的所有实际版本控制.这意味着,通常,命令行上的git命令会失败并显示以下消息:
fatal: Unable to create '/path/to/repo/.git/index.lock': File exists.
Run Code Online (Sandbox Code Playgroud)
Xcode正在创建此文件以锁定repo,因为它运行自己的git命令.我已经关闭了"首选项"中的所有不必要的源控制选项(自动刷新本地状态,自动刷新服务器状态,以及自动添加和删除文件.)
我目前的策略是重试命令直到它工作,这很少需要多次尝试.
有没有办法让Xcode的创建频率更低index.lock?
或者,有没有办法让git自动重试命令,直到它们成功,如果它们以这种方式失败?
这是我的 hacky 补丁:几行 bash 等待锁定文件消失,然后运行你的 git 命令。竞争条件当然是可能的,这不是万无一失的,但在大多数情况下都有效。
function retry {
while [ 1 == 1 ]; do
if test -f /path/to/repo/.git/index.lock; then
echo -n ".";
sleep 0.5;
else
"$@";
return;
fi
done
}
Run Code Online (Sandbox Code Playgroud)
例如,您可以将其放入 ~/.bashrc 中,然后使用它:
retry git commit -m "ohhh yeaaaa"
Run Code Online (Sandbox Code Playgroud)
干杯!
我可以让 git 自动重试命令,直到它们成功,如果它们以这种方式失败?
不适用于本机 git:您需要编写一个 git 命令包装器脚本,该包装器将循环并本质上等待 index.lock 消失(这类似于“ Git - fatal: Unable to create '/path”的答案中描述的等待策略/my_project/.git/index.lock':文件存在“)
该包装器可以:
例如,像 SublimeText 这样的 IDE 就是这么做的
root = git_root(self.get_working_dir())
if wait_for_lock and root and os.path.exists(os.path.join(root, '.git', 'index.lock')):
print("waiting for index.lock", command)
do_when(lambda: not os.path.exists(os.path.join(root, '.git', 'index.lock')),
self.run_command, command, callback=callback, show_status=show_status, filter_empty_args=filter_empty_args, no_save=no_save, wait_for_lock=wait_for_lock, **kwargs)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
937 次 |
| 最近记录: |