相关疑难解决方法(0)

GitHub v3 API - 如何在存储库中创建初始提交?

我正在使用v3 API并设法列出repos/trees/branches,访问文件内容以及创建blob/trees/commit.我现在正在尝试创建一个新的repo,并设法用"POST user/repos"来做

但是当我尝试在这个新的repo中创建blob/trees/commits/references时,我得到了相同的错误消息.(409)"Git Repository是空的." 显然,我可以通过git命令行自己启动存储库,但是如果我的应用程序为我做了它,我宁愿这样做.

有没有办法做到这一点?在创建空存储库后,我需要通过API做的第一件事是什么?

谢谢

api github repository github-api

7
推荐指数
1
解决办法
2692
查看次数

使用预提交搜索文件

我正在尝试添加一个git预提交钩子,它将检查所有已更改的文件和新文件TODO:.

我试过了

#!/bin/sh

. git-sh-setup  # for die 
git-diff-index -p -M --cached HEAD -- | grep '^+' |
grep TODO: && die Blocking commit because string TODO: detected in patch
:
Run Code Online (Sandbox Code Playgroud)

我在类似的问题中看到了,但没有运气.

git terminal grep pre-commit-hook

6
推荐指数
2
解决办法
1915
查看次数

获取GitPython中第一次提交的差异细节

在GitPython中,我可以通过调用diff()不同提交对象之间的方法来单独迭代树中每个更改的diff信息.如果我diff()使用create_patch=True关键字参数调用,则会为每个我可以通过创建的diff对象访问的更改(添加,删除,重命名)创建补丁字符串,并剖析更改.

但是,我没有父级与第一次提交进行比较.

import git
from git.compat import defenc
repo = git.Repo("path_to_my_repo")

commits = list(repo.iter_commits('master'))
commits.reverse()

for i in commits:

    if not i.parents:
        # First commit, don't know what to do
        continue
    else:
        # Has a parent
        diff = i.diff(i.parents[0], create_patch=True)

    for k in diff:
        try:
            # Get the patch message
            msg = k.diff.decode(defenc)
            print(msg)
        except UnicodeDecodeError:
            continue
Run Code Online (Sandbox Code Playgroud)

您可以使用该方法

diff = repo.git.diff_tree(i.hexsha, '--', root=True)
Run Code Online (Sandbox Code Playgroud)

但这会git diff使用给定的参数调用整个树,返回一个字符串,我无法分别获取每个文件的信息.

也许,有一种方法可以创建某种root对象.如何在存储库中获得第一个更改?

编辑

一个肮脏的解决方法似乎是通过直接使用 …

python git gitpython

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

不同git搜索命令之间的区别

初学者的一个问题:git历史记录有多种搜索方式。对我来说,不清楚命令之间的区别到底是什么:

  1. git log,例如git log -S 'for what you search' --all在所有分支中搜索字符串并 git log -G 'search for regexpr' --all搜索 regexpr。例如参见这里
  2. git log --grep 'pattern'
  3. git rev-list,例如git rev-list --grep='string' --all
  4. git grep,例如git grep "string or regexpr" $(git rev-list --all)这里
  5. gitk,例如gitk file.txtGUI 界面
  6. git log --all --full-history -- **/thefile.*从这里搜索历史记录中的文件名。
  7. git diff --word-diff-regex=. > changes.txt结合grep -oP '\+[^\+]+\+' changes.txt | tr -d '\+'显示基于字符的变化。从这里。如果尚未提交更改,这甚至可以工作。

我的理解很差

  • git …

git

5
推荐指数
1
解决办法
641
查看次数

git 子模块和获取

无法理解子模块

它们似乎不必要地复杂。通常我完全避免它们,但一个项目迫使我陷入这种情况

所以...

我在我们的开发服务器上有一个带有子模块的 git repo

/myproject
          /.git
          /files ...
          /other
               /submodule
                         /.git
Run Code Online (Sandbox Code Playgroud)

现在因为我们运行一个开发/生产环境,我们可以做的事情非常有限

我如何能

  • 将 repo 克隆到 prod,以便 prod 服务器完全填充父 git 并且所有子模块都已检出?
  • 那我怎么...
    • 更新其他/子模块中的文件
    • 提交它
    • 将它提取到克隆的 repo
    • 然后将其合并到克隆的 repo 中

我们传统上使用获取然后合并策略而不是单个拉取。由于团队规模很小,我们也不使用裸仓库。

我尝试了多种不同的方法来实现上述目标,但似乎都不对。似乎涉及很多步骤,所以我一定是做错了什么。

此外,我不希望从子模块远程存储库中获取到 prod 服务器的获取。

只是让您知道我正在从事的项目是一个 drupal 8 项目,在生产中进行开发是完全不合适的,我们甚至不安装 composer 或 drush。

git git-submodules drupal-8

5
推荐指数
1
解决办法
4635
查看次数

git 裸仓库、工作树和跟踪分支

我正在使用一个代码库,我需要为了不同的目的同时在多个分支上工作。所以我克隆到一个裸存储库,然后设置一些工作树:

git clone --bare ssh://git@git.example.com/project/repo repo.git
cd repo.git
git worktree add ../branch-1 branch-1
git worktree add ../branch-2 branch-2
... someone else creates branch-3 and pushes is ...
git fetch origin +refs/heads/*:refs/heads/* --prune
git worktree add ../branch-3 branch-3
Run Code Online (Sandbox Code Playgroud)

现在工作branch-3树没有设置为跟踪远程树并试图让它这样做,我陷入了可怕的混乱。

$ cd ../branch-3
$ git branch -u origin/branch-3
error: the requested upstream branch 'origin/refs/heads/feature/SW-5884-move-database-container-to-alpine-base-2' does not exist
hint: ...<snip>
$ git fetch +refs/heads/*:refs/remotes/origin/* --prune
$ git branch -u origin/branch-3
fatal: Cannot setup tracking information; starting point 'origin/feature/SW-5884-move-database-container-to-alpine-base-2' is not a …
Run Code Online (Sandbox Code Playgroud)

git git-bare git-branch git-worktree

4
推荐指数
3
解决办法
3090
查看次数

我可以在 git 存储库中签出“无内容”吗?

假设我有一个 git 存储库,在某些分支上工作,并且在某些时候我不想签出任何分支。我可以这样做吗?

换句话说,我可以git clone path-to-repo --no-checkout在现有存储库上获得 , 但的效果吗?

编辑:实际上,如果主分支文件不显示为已删除,那就更好了。因此,理想的答案并不git clone--no-checkout.

注意:如果您的建议需要最新版本的 git,请说明。

git checkout

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

不良的git reset --hard命令后恢复文件

这将需要一位专家:

我运行了一个git initgit add --all一个我从事了很长时间的新项目,直到我意识到自己还没有设置git repot。运行git add之后,我意识到我忘记创建.gitignore文件。不假思索我就跑了git reset --hard HEAD,哦,我所有的文件都消失了,没有日志或reflog,没有状态,所有命令都生成了fatal: bad default revision 'HEAD'。我确定答案是我被搞砸了。似乎无法对任何悬垂的斑点执行任何操作。希望在那里找到一些上师知道我不知道的事情。

git fsck --full git:master
notice: HEAD points to an unborn branch (master)
Checking object directories: 100% (256/256), done.
notice: No default references
dangling blob c57eff55ebc0c54973903af5f72bac72762cf4f4
dangling blob 4740a6ee5099aa087bac317337e28bba78c4b83c
missing tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
dangling blob 0d6b3be3e5517a7a7df7df941a6bd3740fcfc5e1
dangling blob d0437745b1902b1ec7e4154a6c058a900575ae7b
dangling blob 5223f05f29bed36037a68f1185f0d718f2a5f9b8
dangling blob d3f186be7e3fcac86aa15c6ebf416f636269f356
dangling blob 526b432e210b3a943df9a7146a0fb4c3e30fc2f5
dangling blob 96722f502f9bd93e5205ea07d8c9b56b11f2e9bd
dangling blob 594eff1d8bfd71561f4f9a0b1447c764e812e2aa
dangling blob df1b87ad781e0a961648f2c01d37b9fe15e581bd
dangling blob e196d0eaf4df52ec1d65faf1971e444d37640284 …
Run Code Online (Sandbox Code Playgroud)

git recovery

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

Git 日志列表提交不包括从第一个分支中精心挑选的内容

例如我有这个提交历史记录

git 历史记录 在此输入图像描述

假设在某个时候release1发布到生产环境,几天后,release2分支发布了。

  • 分支relase1包含从 master 精心挑选的 2 个提交(4 和 5)
  • 分支release2包含 2 个提交(8 和 9),也是从 master 中精心挑选的。

择优挑选永远不会因为-x争论而结束。

我想要获得release2“当时尚未发布”的所有提交,这意味着由绿色圆圈标记的提交(6,7,8,9)。

做到这一点最简单的方法是什么?

github中的存储库示例

更新1(git樱桃)

$ git cherry -v release1 release2
- 91785f2be363244a1da4459746fce6a6ea28c2b5 4
- e88de1f8b62213089b300e3143c4caf509b5c13b 5
- 9d23e9c7e6f769c3bbb44ad42bc7b708b4b0a9e6 6
- 6fb71e4406e0b127e06f6e5b145de8a9d39db01e 7
- 6276becc413494b7724a4dd8b852234f4b71e913 8
- 6dd3b5b75222c02c921c9c20bcaee83e1c8be746 9
Run Code Online (Sandbox Code Playgroud)

有了cherry,似乎我仍然得到了 4 和 5,它们都是 form master

更新 2(--左-右--cherry-mark)

$ git log --left-right --cherry-mark --pretty=oneline --abbrev-commit  release2...release1
= 6dd3b5b 9
= …
Run Code Online (Sandbox Code Playgroud)

git github

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

为什么"git branch"在新的存储库中保持沉默?

当您创建新存储库并运行时git branch,它将以静默方式退出.例如:

$ mkdir /tmp/foo; cd /tmp/foo; git init
Initialized empty Git repository in /tmp/foo/.git/

$ git branch
Run Code Online (Sandbox Code Playgroud)

为什么命令不提供任何输出,或显示主分支?

git git-branch

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