问题标签 [git-alias]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - git克隆所有分支bash脚本作为git别名
我想创建一个克隆所有分支的git 别名。
我们有了 bash 脚本,感谢这篇文章: 如何在 Git 中克隆所有远程分支?
这是 bash 脚本(多行版本):
(一行版本):
让我们调用 git 别名git cloneallbranches
我尝试使用以下方法设置单行和多行版本:
$ git config --global alias.cloneallbranches '...'
并尝试将两个版本都粘贴到我的 .gitconfig 文件中,但均未成功(我还有其他 git 别名,但没有一个是 bash 脚本)。
有人可以帮我修改一个 bash 脚本,以便我可以将它粘贴到我的 .gitconfig 文件中,以使 git 别名正常工作吗?
谢谢你。
回答:
在下面的回复中运行一个单独的 bash 脚本作为“git 别名”答案。
但是,对于那些想要快速添加 git 别名的人,$ git clone-all-branches
这里有一个答案:
- 感谢此处更新的答案:如何在 Git 中克隆所有远程分支?
创建一个“git alias”,它将运行一个脚本:
$ git config --global alias.clone-all-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'
现在你可以运行(从任何有 git repo 的目录):
$ git clone-all-branches
git - Git别名:如何将当前目录传递给shell命令?
我在 Windows 下使用 git bash,我想做一个 git 别名命令,它在概念上是这样的:
Where$dir
扩展到执行的 bash shell 中的当前工作目录git assume_unchanged_below
。
即,如果我进入C:\somedir\somesubdir
并执行,git assume_unchanged_below
我希望它就像我输入的一样git ls-files -z C:\somedir\somesubdir | xargs -0 git update-index --assume-unchanged
似乎可以通过git rev-parse --show-prefix
. 我也知道可以使用匿名函数传递参数,但是我无法将这两个概念结合起来以获得我想要的行为。
例如,如果我这样做:
然后我可以输入
并且它的行为符合预期($1
正确扩展到当前工作目录)。
但是,我不想手动传递git rev-parse --show-prefix
给别名,我希望它自动推断,这样我只需要输入
让它在当前工作目录上运行。
我试过这个
但这不能正常工作;$1
里面是f()
空的。这大概是因为正在执行的新 shell 进程f()
将存储库根目录作为其当前目录。
甚至可以在 git 别名中做我想做的事情,还是我需要在我的 .bashrc 中创建一个别名来完成这个?
-------------------- 更新答案--------
@vampire 使用 $GIT_PREFIX 的建议奏效了,因为 $GIT_PREFIX 从触发原始别名的 git shell 继承其值。
这是一个工作示例,带有可用性装饰:
git - git commit --amend 很危险
git commit -amend
我有时会在我真的想打字时不小心打字git commit --amend
。Git 检测到并询问我
这很棒。
但是,有时我写git commit -ammend
了然后 git 会接受它并将我的拼写错误视为git -a -m "mend"
,所以它只是使用日志消息“mend”提交。
我正在寻找一种方法来阻止 git 这样做。我试图定义一个别名,git commit -ammend
但现在失败了。你对如何处理这个问题有什么建议吗?
git - git别名:多个命令,可变参数
我经常发现自己在打字:
我更喜欢一个别名,我可以在其中输入:
注意:我知道我可以使用多个 url 创建一个新的远程“all”。让我们在这里不讨论这个,而是关注别名!
我可以硬编码远程名称,因为我有许多具有相同多个远程名称的项目(通常是“drupal”和“github”)。
迄今为止的进展
我已经想出了一个非可变版本:
这里有两个技巧
- 使用双引号来防止';'
.ini
在文件中具有特殊含义 #
忽略该行的其余部分。
但这一次只会推送一个分支(或标签)。所以我必须输入这个:
我更喜欢一个别名,我可以在其中输入:
为什么不使用具有多个推送 url 的新远程“全部”?
如前所述,让我们关注别名,以便读者找到他们正在寻找的东西。
无论如何,这就是我不创建远程“全部”的原因:
- 每个项目我都必须这样做一次,并且不能在全球范围内这样做。就我而言,在全局别名中硬编码远程名称实际上很好!
- Afaik,我会用“all/branch1”之类的引用来污染我的历史,而不是“remote1/branch1”和“remote2/branch1”。
讨论这个问题的正确地方是这里,从多个远程位置拉/推
也可以看看
以下是相关的,但它们不涉及可变参数:
以下内容可能会有所帮助,但它针对的是纯 shell 脚本,而不是专门的 git 别名:
git - 有没有办法为 git 选项创建快捷方式或别名
我发现自己经常使用--name-status
option 和git log
, git diff
, git show
。我知道 git 别名,但它们仅适用于命令或命令和/或选项的组合。我不想只为这个选项创建 git 别名。
--ns
所以我可以在快捷方式的地方做这样的事情--name-status
:
更新:请参阅我自己的答案以了解不同的考虑。
git - 函数中的Git别名输出着色
我正在尝试添加一个复杂的 git 别名,它将在执行命令时回显消息。我想为一些消息着色(红色表示错误等)。
但是,当我执行别名时出现错误:
在终端中运行相同的命令echo "\033[31mHello\033[0m World"
可以很好地着色。
git - 设置使用 TR 将反斜杠转换为正斜杠的 Git 别名
我正在尝试设置一个Git
别名,该别名必须将反斜杠转换为正斜杠,以便稍后将其传递给filter-branch
命令(因为我使用Posh
并将DOS
基于文件路径作为参数传递,所以需要)。
所以我有这个别名:
但我得到这个错误:
tr:警告:字符串末尾的未转义反斜杠不可移植
我试着tr '\\\\' '/'
在里面写,认为它Git
只是逃避\
并bash
得到一个\
,但我得到了同样的错误。
有任何想法吗?
git - 无法为第一次提交创建 git 别名
我一直在努力尝试在我的.gitconfig
:
但是,我得到以下异常:
我一直在尝试该命令的几个替代版本,但无法正确使用。我想在.gitconfig
文件中手动创建它,而不是通过在终端中提供命令(即git config --global
)。
有没有人知道这个可能出了什么问题?我在 unix/terminal 中的婴儿步骤:-)
编辑 我希望能够使用别名获得与从终端运行命令时相同的结果。也就是说,作者、SHA、日期、提交消息,而不仅仅是 SHA。
git - 管道命令时 git bad config
这两个命令都从命令行工作
和
在 [alias] 下添加到 gitconfig 时
我知道fatal: bad config line 16 in file /Users/<me>/.gitconfig
这是第二行。由于这个答案,我最初的问题是让当前分支成为别名。所以我主要是好奇为什么两者都在命令行上工作,但只有 1 可以在配置中工作。我猜这是' '
需要逃避的,但这只是一个猜测。
git - 在 git-alias 中引用自己的用户名
我想列出“自我上次提交以来”的所有提交。
现在我使用这个日志别名变体:
一般来说,这很好用——但我想实际引用我在 .gitconfig 中声明的用户名,而不是对其进行硬编码。
是否可以访问该值?(例如$(GITCONFIG:User:Name)
:)
以防万一:$(whoami)
不起作用,因为用户名不匹配。