小编usr*_*etc的帖子

带有相对路径的git worktree?

我的回购中有一个master和一个setup分支。我将setup分支作为工作树主 repo 文件夹中通过

git worktree add ./local/setup
echo '/local' > .gitignore
Run Code Online (Sandbox Code Playgroud)

所以主 repo 文件夹是 on masterlocal/setup文件夹是 on setup。一切都很好,我可以处理我的setup文件而不必切换分支,我可以从内部提交local/setup等等。

但是,如果我尝试移动整个存储库,或者从不同的 Linux 引导(/home/myrepo变成/mnt/ubu/home/myrepo)访问它,事情就会中断。问题似乎是git's worktree 功能记录了绝对路径,在

myrepo/.git/worktrees/setup/gitdir
myrepo/local/setup/.git
Run Code Online (Sandbox Code Playgroud)

我可以将这些转换为相对路径以使 repo + 嵌入式工作树可重定位吗?我不确定这些文件中的路径应该相对于 什么,但我可以进行试验。这种设置危险吗?

git git-worktree

6
推荐指数
1
解决办法
279
查看次数

git rebase -i 提交标志?

当应用压缩或改写的提交时,rebase -i自动调用提交编辑器。我习惯于提交commit -v(我想看看我提交的差异),但是 rebase-invokedgit commit似乎没有设置-v。这在压缩提交时非常烦人。

有没有办法配置git commit标志以供在rebase loop.

git git-rebase

6
推荐指数
1
解决办法
53
查看次数

git 自定义子命令的 bash 补全?

假设我有一个git-cc可执行文件PATH。如果git-cc支持--help,那么很容易提供足够的完成

complete -F _longopt git-cc
Run Code Online (Sandbox Code Playgroud)

这样就$ git-cc --<TAB>完成了(根据帮助输出)。但git cc --<TAB>不会完成(即使它运行良好)。更重要的是,如果我为自定义子命令创建 git 别名,例如cc-sensible-defaults = cc --opt1 ...,那也不起作用,在这种情况下,简单地删除空格(git-cc而不是git cc)不是一个选项。

该怎么办?我尝试过使用__git_complete [git-]cc _longopt,但各种组合都没有起到任何作用。它似乎是为了完成 bash 别名(如gl = git-log),而不是子命令。正如预期的那样, git/git-completion.bash中的介绍不是很有帮助,包含令人困惑的内容

# If you have a command that is not part of git, but you would still
# like completion, you can use __git_complete:
#
#   __git_complete gl git_log
#
# Or …
Run Code Online (Sandbox Code Playgroud)

git bash-completion git-completion

4
推荐指数
1
解决办法
589
查看次数

Perl “do { ... } if ...” 作为表达式

my $x = do { 3; } if 1; say $x # works

my $x = (do { 3; } if 1); say $x # syntax error

怎么来的?如果 do 块是一个表达式,为什么不能用括号括起来呢?如果不是,第一个如何解析?

syntax perl expression

3
推荐指数
1
解决办法
458
查看次数

perl shebang:`对“-Mstrict”来说太晚了`

我有以下受人尊敬的 perl 脚本x.pl

#!/usr/bin/env -S perl -Mstrict -wp
s/a/b/;
Run Code Online (Sandbox Code Playgroud)

如果我用./x.pl或运行它perl x.pl,它会用

Too late for "-Mstrict" option at ./x.pl line 1.
Run Code Online (Sandbox Code Playgroud)

但为什么?我认为“太晚了……”只是-CSDAor 之类的问题-T,因为“流已经打开”。此外,shebang 行实际上不是简单地使用指定的开关调用 perl 吗?

linux perl shebang

3
推荐指数
1
解决办法
91
查看次数

shell case 模式 [...] 不允许的字符

case 模式中的括号表达式似乎不允许[() &;]. 但是,我似乎在POSIX shell 规范bash 手册中找不到任何此类限制(或转义解决方法)。

case '&' in
# *[&]*)  echo y ;;  # won't parse
  *[\&]*) echo y ;;  # will parse & work
esac
# similar for ';', ' ', '(', ')'
# not a problem for ${var#[&; ()]}
Run Code Online (Sandbox Code Playgroud)

这是一个sh无法调用外部实用程序的shell 脚本函数(但我也很好奇bash)。那么......是否有任何规范描述在括号表达式模式中对这些字符进行反斜杠处理?

bash posix sh

3
推荐指数
1
解决办法
82
查看次数