标签: git

如何使用 etckeeper 进行干净的提交?

我想用 etckeeper 进行干净的提交。这是发生的事情:

1)检查存储库的状态:

git status

On branch master
nothing to commit, working directory clean
Run Code Online (Sandbox Code Playgroud)

2)修改配置文件:

vi myfile.conf
Run Code Online (Sandbox Code Playgroud)

3) 将其添加到索引中

git add myfile.conf
Run Code Online (Sandbox Code Playgroud)

4)提交

git commit -m"Add this ... to myfile.conf"
Run Code Online (Sandbox Code Playgroud)

5)观察提交:

git log -p -1

[...]
 maybe chmod 0644 'magic.mime'
-maybe chmod 0644 'mail.rc'
 maybe chmod 0644 'mailcap'
 maybe chmod 0644 'mailcap.order'
 maybe chmod 0644 'mailname'
+maybe chmod 0644 'mail.rc'
 maybe chmod 0644 'manpath.config'
 maybe chmod 0644 'matplotlibrc'
 maybe chmod 0755 'maven'
 [...]
 (My modification to myfile.conf)
 [...]
Run Code Online (Sandbox Code Playgroud)

我知道即使我不理解这种重新排序的目的,etckeeper …

git etckeeper

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

使用 git diff 仅显示没有语法的更改行

我有一个文本文件中的用户名列表。我更新这个文件并提交它。我正在寻找一种方法来获取自上次提交以来的更改列表。

我根本不需要任何差异格式,我只想获得自上次提交以来每行一个用户名的输出(因为它们被添加到每个提交中)。

我找不到从输出中删除所有 git diff 语法的设置,因此它纯粹是仅添加的新行列表。

例子

原始文件:

user1
user2
user3
Run Code Online (Sandbox Code Playgroud)

然后我添加

user4
user5
Run Code Online (Sandbox Code Playgroud)

然后提交。

我希望能够进行 git diff 并仅查看:

user4
user5
Run Code Online (Sandbox Code Playgroud)

diff git text-processing

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

阻止 git 用户登录,但允许用户仍然作为 git 存储库运行?

我已经设置了一个 git 服务器,方法是创建一个用户“git”,然后在 git 用户的目录中创建一个本地存储库。

git 服务器运行良好,我可以拉、推等。我允许用户通过将他们的公钥添加到 git repo 来与 git repo 交互

 .ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)

文件。我已禁用基于密码的登录。但问题是这些用户可以通过 ssh 登录服务器,因为他们的密钥在授权密钥列表中。好的,git 用户的权限设置为非常有限,但是,如果 git 无法直接登录,我还是更喜欢它。

有没有办法禁用“git”用户的登录,但保持 git 用户接受推送和通过 git/ssh 拉取的能力?

ssh permissions git

4
推荐指数
2
解决办法
2194
查看次数

如何从 Debian 软件包的 Git 存储库创建上游 tarball

我有一个包含以下分支的 Git 存储库:

debian
master
pristine-tar
upstream
Run Code Online (Sandbox Code Playgroud)

我没有上游焦油球。我可以从我拥有的 Git 存储库创建上游 tarball 吗?如果是这样,怎么办?

packaging debian git

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

为什么执行`git status`会改变后续`git diff-index`的结果?

考虑:

$ git --version
git version 2.20.1 (Apple Git-117)
$ git diff-index --quiet HEAD ; echo $?
1
$ git status > /dev/null
$ git diff-index --quiet HEAD ; echo $?
0
Run Code Online (Sandbox Code Playgroud)

这是在具有不区分大小写文件系统的 macos 上。(我不知道这是否相关。)在发生这种情况的主机上,有一个运行 debian 的 docker 镜像并挂载了相同的目录,而在 docker 镜像中,发生了相反的行为:

$ git diff-index --quiet HEAD ; echo $?
0
# At this point, `git status` was invoked outside the docker image
$ git --version
git version 2.20.1
$ git diff-index --quiet HEAD ; echo $?
1
Run Code Online (Sandbox Code Playgroud)

需要说明的是,这里执行的命令顺序是:git diff-index …

git docker

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

查找两个 Linux 内核版本之间的所有提交

我正在尝试在官方 Linux 内核存储库的 git clone 中查找并列出在两个 Linux 内核版本/标签之间(在 Linux 内核 4.4.0 和 4.9.273 之间)之间所做的所有提交。

哪个 git 命令或软件工具可以帮助我实现这一目标?

linux git

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

是否有必要在从 git 存储库签出的脚本上设置可执行位?

我经常运行的文件夹中有一些脚本。这些脚本经常更新。更具体地说,每次我们在服务器上进行部署时,我们都会将脚本替换为 git 存储库中的更新脚本。

我们每次都必须让它们可执行吗?

permissions git

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

在 less 内部,是否有相当于 ctrl-Z 的功能来恢复寻呼机提示符?

我偶尔会使用镐功能来git定位感兴趣的更改。显然,这可能非常慢(这同样适用于,比如说hg grep),但更重要的是它是突发的:一些结果聚集在一起,由不活动分开。

\n

出于这些原因,我尝试在结果出现时读取结果,实际上通过将输出管道传输到less(事实上,这是git默认情况下的操作):当突发到来时,您不可能ctrl-S对软件流程足够快地击中控制功能现在很有用。

\n

但我经常遇到一个\xe2\x80\xa6 行为,less如果我滚动得足够多,即使只有一行要在屏幕上显示的内容还没有从命令中出来gitless就会陷入困境,并且我会失去它的提示和大多数方式控制它,直到更多内容出现。现在,我明白为什么会发生这种情况,但如果这是 shell 命令的行为,我会使用ctrl-Z恢复提示(然后执行bg)。是否有等效的方法less来恢复寻呼机提示?

\n

在这种情况下,ctrl-Z没有用:Unix 作业控制不适合管理屏幕内容的命令。此外,我不想回到 shell 提示符:通常,我想做的是检查我在反复按空格键时可能瞥见的内容,所以我不想留下更少的内容。

\n

Ctrl-C也是无用的:虽然它确实允许我恢复提示,但这还会导致收到的内容被冻结;也就是说,当我的好奇心得到满足并尝试返回到最新内容(按几下空格键或G等)时,无论我等多久,都只会出现我所看到的内容。即使使用Ftail -f模式)。

\n

我使用此命令来模拟git行为:

\n
(echo -e 'foo\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.' ; sleep 3 ; echo -e 'bar\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.' ; sleep 10; echo baz) | less\n
Run Code Online (Sandbox Code Playgroud)\n

less terminal signals git mercurial

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

无法通过 ssh 进行 git clone

我创建了一个裸 git 存储库并以 root 身份推送到。然后我运行su myuser并运行以下命令:

$ whoami
myuser
$ mkdir t
$ cd t
$ git clone ssh://myuser@mybox.net:1234/git3

Cloning into git3...
myuser@mybox.net's password:
fatal: '/git3' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

$ git clone /home/myuser/git3
Cloning into git3...
done.
Run Code Online (Sandbox Code Playgroud)

为什么 ssh 失败?我可以使用本地路径克隆它,并whoami显示 myuser -- 我不是 root。只是为了确保我拥有正确的地址,我ssh myuser@mybox.net -p 1234通过复制/粘贴信息而不是输入信息来编写。

我不明白为什么 ssh 不起作用。我知道我在这个远程盒子上工作过,但我从 debian lenny 升级到了挤压,最近我做了各种配置更改。我不明白为什么我不能在这里将 git 与 ssh 一起使用。

ssh git

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

git 权限问题

我有一台在 CentO 上运行的开发机器。

每当我使用 git 从 git 中提取时,git pull我都会收到“权限被拒绝”问题/错误。

当我执行拉取操作时,Git 显然无权覆盖所需的文件。因此,每次我都必须sudo git pull让它工作。

我宁愿不做,sudo git pull因为我希望每个人都能够从我们的开发服务器中提取。

我如何将 git 配置为具有适当的权限才能在没有sudoing 的情况下进行拉取?这是因为我可能没有正确配置 git 吗?如果是这样,我如何配置 git 以允许正确的权限?

不确定这是否有帮助,但which git揭示了这一点:

/usr/bin/git

示例错误

我执行:git commit -m "my fun message" 我得到:

错误:无法附加到 .git/logs/refs/heads/stage:权限被拒绝致命:无法更新 HEAD ref

permissions git

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