通常,git 别名仅限于单个命令:
git config --global alias.ci commit
Run Code Online (Sandbox Code Playgroud)
所以,而不是git commit你可以做git ci
但似乎您也可以在其中插入一个函数:
git config --global alias.up-sub '!f() { cd $1 && git checkout master && git pull && git submodule update --init --recursive; }; f'
Run Code Online (Sandbox Code Playgroud)
这允许您调用 git up-sub some-submodule
问题是:它是如何工作的?我还没有!f()在任何其他上下文中看到语法。
我不小心rm -r在我的 .git 目录上运行了一个。幸运的是,rm当它到达一个写保护的文件时停止了,但我仍然在我的 .git 中丢失了一些东西。
我还有的文件:
FETCH_HEAD
ORIG_HEAD
config
gitk.cache
logs/
objects/
Run Code Online (Sandbox Code Playgroud)
我丢失的文件:
HEAD
description
hooks/
index
info/
packed-refs
refs/
Run Code Online (Sandbox Code Playgroud)
据我所知,我失去的唯一无法重新克隆的东西是我的暂存区和我的裁判的变化。我准备失去我的暂存更改,但我真的需要恢复我的 HEAD 和我的分支。有没有办法做到这一点?比如说,通过查找没有子项的提交,检查它们以查看它们是什么并为它们创建分支?目前 git 甚至不再将我的存储库识别为存储库。
假设我有两个文件。第一个有内容:
line 1
foo
line 2
line 1
bar
line 2
Run Code Online (Sandbox Code Playgroud)
第二个在中间插入了一个新部分,所以它看起来像这样:
line 1
foo
line 2
line 1
new text
line 2
line 1
bar
line 2
Run Code Online (Sandbox Code Playgroud)
现在,当我执行“diff -u”时,我得到如下输出:
--- file1 2013-06-25 16:27:43.170231844 -0500
+++ file2 2013-06-25 16:27:59.218757056 -0500
@@ -1,7 +1,11 @@
line 1
foo
line 2
line 1
+new text
+line 2
+
+line 1
bar
line 2
Run Code Online (Sandbox Code Playgroud)
这并没有正确反映插入了中间节——相反,它看起来像是第二节被更改了,并且在末尾添加了一个新节(这是因为算法从第一个不同的行开始)。
有没有办法让 diff(单独使用,或者使用 git diff)来显示这个输出?
--- file1 2013-06-25 16:27:43.170231844 -0500
+++ file2 2013-06-25 16:27:59.218757056 -0500
@@ -1,7 +1,11 @@ …Run Code Online (Sandbox Code Playgroud) 我需要将本地存储库中的单个文件复制到我的机器上,git-pull或者git-fetch,我该怎么做?
是否可以通过 hash 获得它?比如a3ea2118bf1c5e2c6aa0974d0b6ff7415bd044ef?
I have a RHEL 6.4 VM provisioned by my company's internal KVM.
We are having some trouble using yum (Cannot retrieve repository metadata, which I've confirmed in this case is peculiar to my company's internal cloud), so I have to build Git from source.
Downloading the RPM file and issuing
sudo yum localinstall ....rpm
Run Code Online (Sandbox Code Playgroud)
Gives me the same Cannot retrieve repository metadata error.
Issuing
sudo rpm -ivh ....rpm
Run Code Online (Sandbox Code Playgroud)
Fails with an error: Failed dependencies and then lists all …
从git-revert(1)联机帮助页中,我不清楚命令的quit和abort选项之间的确切区别revert是什么。
从我对revert命令的练习中,我观察到该abort选项的工作方式与rebase命令之一非常相似,因为它试图重建当前分支的预操作状态。
此外,该quit选项的实际用例是什么?
在OpenBSD和与OpenBSD的cron和crontab,是它可以存储crontab(5)用户在git同一用户的信息库?
完成这样的事情的正确方法是什么?
(为了将答案引向正确的方向,我不反对更改系统中的某些权限,尽管我不想重新编译二进制文件,也不想违反任何良好的安全范例。)
很难找到有关这个简单问题的信息。
像许多人一样,我们在远程实例上运行 gitlabs/gogs 服务器。目前它侦听端口 10022。我们还在该实例上运行 ssh 来管理服务器。它侦听端口 22。
我们希望 ssh 服务器侦听端口 22,以便将 Git@ ONLY 的连接转发到 10022 上的 Git 服务器。
这样当人们在本地使用 Git 时,他们就不必每次都手动指定我们远程 Git 服务器的端口。
我们应该怎么做?
${$(git rev-parse HEAD):0:5}
bash: ${$(git rev-parse HEAD):0:5}: bad substitution
Run Code Online (Sandbox Code Playgroud)
git rev-parse HEAD 返回哈希 ID,但如何从中生成子字符串?
如果我把它分成两行,它就起作用了。
x=$(git rev-parse HEAD)
echo ${x:0:5}
Run Code Online (Sandbox Code Playgroud)
但是我如何在一行中做到这一点?
我正在尝试为其创建别名,mv以便它在普通文件夹中执行其正常行为,并由git mv内部 git 存储库替换。我尝试了很多方法。if 语句有效,只有命令git mv无法正确运行。
alias mv='"$(
if [ x`git rev-parse --show-toplevel 2> /dev/null` = x ];
echo mv;
else
echo "git mv";
fi)"'
Run Code Online (Sandbox Code Playgroud)