刚刚帮助一位朋友调试了“损坏的 git 引用”。修复很容易update-ref -d
或rm -r .git/refs/...
,但我仍然不明白是什么导致了这个问题。
我对 git 的底层有中等程度的了解,但我还没有深入研究实际.git
目录。
分支/引用如何存储.git
?这会导致引用损坏吗?发生这件事时,他并没有做什么异常的事情。
刚刚帮助一位朋友调试了“损坏的 git 引用”。修复很容易update-ref -d
或rm -r .git/refs/...
,但我仍然不明白是什么导致了这个问题。
我对 git 的底层有中等程度的了解,但我还没有深入研究实际.git
目录。
分支/引用如何存储.git
?这会导致引用损坏吗?发生这件事时,他并没有做什么异常的事情。
我已使用“使用 GitHub 登录”功能在 Gitea 实例上设置了一个帐户,并且该帐户已被授予对 Gitea 存储库的写入权限。当我尝试将本地更改推送到 Gitea(使用我共享的 GitHub 和 Gitea 用户名)时,系统会提示我输入密码。提供我的 GitHub 访问令牌或密码会导致“身份验证失败”消息。
我计划尝试的下一件事是使用用户设置›帐户控制面板为 Gitea 帐户设置密码。我不确定是否可以执行此操作,因为它要求我输入当前的 Gitea 密码,而我没有该密码,而且我担心尝试执行此操作可能会破坏我现有的 GitHub 登录能力。
我找不到“使用 GitHub 登录”功能的任何文档。搜索有关外部用户的文档并使用 OAuth 进行推送也一无所获。
我有一个 git 存储库,我需要克隆它,做一些事情,然后打包并发送给其他人。我通过 Ansible 使这一切自动化,因此不需要用户干预。
我想确保在克隆存储库之后,在“打包”之前,它会重置为所需的状态(分支/标签),从而删除之后可能已添加到本地文件夹/工作树的任何文件/文件夹它被克隆了。为此,我正在使用git reset --hard $ref
.
这可以很好地删除不需要的文件,但问题是如果将空文件夹添加到存储库目录中,则不会将其删除。
git 有没有办法删除空文件夹和文件?
请帮我调试这组终端命令。
我已经创建了一个 GPG 密钥并将其添加到 github,并且正在尝试签署我的提交:
me@my-macbook myproject % gpg --list-secret-keys --keyid-format=long
[keyboxd]
---------
sec rsa4096/CMC8D2G96B994245 2023-10-27 [SC] [expires: 2025-10-26]
07A38FD8F66EBD7597K3ID51CMC8D2G96B994839
uid [ultimate] gpgunm <[email protected]>
ssb rsa4096/078974E15960FC14 2023-10-27 [E] [expires: 2025-10-26]
me@my-macbook myproject % git config --global user.signingkey CMC8D2G96B994245
me@my-macbook myproject % git commit -m "Fix vulns"
error: Couldn't load public key CMC8D2G96B994245: No such file or directory?
fatal: failed to write commit object
me@my-macbook myproject %
正如你所看到的,我列出了密钥,并尝试设置我的歌唱密钥,但是当我提交时 git 说它无法加载公钥,因为没有这样的文件或目录。
当我导航到 git 存储库的目录时,我的命令行显示了很多内容。它看起来像 git-show-branch 的输出。我尝试编辑我的 git 配置文件来更改 [show-branch] 的默认值,但无济于事。我的提示中列出了大约 40 个提交,这确实很麻烦。有人知道如何让我的提示恢复到默认值吗?
操作系统是RHEL。
我的提示如下(## 替换敏感信息):
on ! [backup-master] This is the fixes I need!
! [checkout] Added ## and ##. This commit may be garbage
* [master] Merge branch 'master' of /home/path/path
! [oldRval] Added top level cells ## and ##
----
- [master] Merge branch 'master' of /home/path/path
* [master^2] Changes to ## and level ##. Modified ## boost architecture
* [master^2^] Changes to all ##, some ##, many ##
* [master^2~2] many schematic changes. Updated ##. Updated ##
* [master~2] placement update done. ## done update and ongoing ## errors.
* [master~3] ongoing block
* [master~4] Updates to ##. Updated to ## for cleaner layout.
* [master~5^2] final fixes on ##. Separated ##.
* [master~5^2^] This is the fixes I need
* [master~6] Updated ##, ## and some ## with ## versions
+ [backup-master] this is the fixes I need
++* [checkout] Added XX and ## . This commit may be garbage
++*+ [oldRval] Added top level cells ## and ##
如果没有冲突,TortoiseGit 中的合并会自动将一个文件合并到最新的代码中。
但是,我只想选择一些块进行合并(文件不冲突)。是否可以显示那些有差异的文件列表,以便在合并和提交之前选择要使用的块?
最近在我的 linux 系统上,我遇到了无法提交到我自己的 github 存储库的问题。当我尝试这样做时,这就是我得到的:
my prompt: > git push --verbose
Pushing to https://github.com/MyUsername/my-repository.git
info: please complete authentication in your browser...
fatal: The SSL connection could not be established, see inner exception.
fatal: The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot
Username for 'https://github.com':
Password for 'https://github.com':
remote: No anonymous write access.
fatal: Authentication failed for 'https://github.com/MyUsername/my-repository.git/'
发生的事情是我得到一个窗口,要求我登录到 github(通过 Web 界面),我这样做,在我的浏览器中获得“授权成功,返回到您的应用程序”页面 - 在我的应用程序中,我显然可以看到我的机器不信任 github。由于某些原因。
我如何说服它实际上可以建立与 github 的安全连接?
如果这很重要,我的系统是 linux mint。
git pull
由于某种原因不适用于詹金斯。我已经更新了本地 PC 上的一些文件并将其推送到我的 Github。我可以看到那里的变化。然后我运行 Jenkins 构建,它有 sh 命令从这个 repo 中提取,它说“已经是最新的”。这是错误的,因为我清楚地将新版本推送到了 Github,如果我去那里并在浏览器中打开文件,我可以看到更改。这只发生在 Jenkins 运行 git pull 的情况下,因为如果我连接到我的虚拟机并运行git pull
自己,它可以正常工作并更新我的文件。为什么会这样?
我的詹金斯文件:
pipeline{
agent any
stages{
stage("build"){
steps{
echo 'build'
sh 'cd /var/atlassian/application-data/jira/scripts'
sh 'eval "$(ssh-agent -s)"'
sh 'ssh-add ~/.ssh/id_ed25519'
sh 'git pull [email protected]:mightyajax/scripts.git'
}
}
stage("test"){
steps{
echo 'test'
}
}
stage("deploy"){
steps{
echo 'deploy'
}
}
}
}
在我的本地电脑上,我更新了我的文件。然后我:
git add --all
git commit -m "text message"
git push
我可以看到我在 Github 上所做的更改。然后我尝试git fetch
在我的虚拟机上,它只是说:
From github.com:mightyajax/scripts
* branch HEAD -> FETCH_HEAD
但什么也没发生?我需要的文件还是旧版本?
也许我错了我是 git 新手,我的想法就像我在本地电脑上更新文件并在 VM 上获取它。我认为这是一个非常简单的任务,我不明白这里的问题。
git 版本是 2.37.1 操作系统版本是 Ubuntu LTS,我正在为 Github 使用 SSH 密钥