- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个仓库,其中 Git 显示:
$ git status
# On branch develop
# Your branch is up-to-date with 'origin/develop'.
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: pom.xml
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: src/main/java/fr/SomeClass.java
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# README.md
#
如果出现以下情况,我想以相当快的方式知道:
pom.xml
)SomeClass.java
)README.md
)我在第一种情况下使用以下命令:
git diff --no-ext-diff --quiet --exit-code 2> /dev/null || w='*'
git diff --no-ext-diff --quiet --exit-code HEAD 2> /dev/null || h='+'
但是只有一个文件没有暂存时,w
和h
用*
和+
填充。
$ git status --porcelain
M pom.xml
M src/main/java/fr/SomeClass.java
?? toto
会工作,但它会打印很多,我正在寻找可以简单地打印多个项目的东西,例如:
1 1 1
其中每个数字分别是暂存的、未暂存的和未跟踪的。
我在这里的目的是打印我的存储库是否发生了变化,以及发生了什么变化。我不想解析整个输出(这将适用于 grep
等,但我想避免这种情况)。
哦,我将它标记为 Windows,因为我正在寻找一种既能在 Linux 上工作又能在 Windows 上使用 git-bash 的解决方案。基于 Bash 4 的解决方案,如果没有明确的方法在 Bash 3 中执行此操作,对我帮助不大。
最佳答案
#!/bin/bash
let untracked_count=0 worktree_count=0 staged_count=0 other_count=0
git status -z --porcelain > status.tmp
while IFS= read -n 2 stat; IFS= read -d '' line; do
case "$stat" in
(\?\?) (( untracked_count++ )) ;;
(\ ?) (( worktree_count++ )) ;;
(?\ ) (( staged_count++ )) ;;
(M?) (( worktree_count++ )) ; (( staged_count++ )) ;;
*) (( other_count++ )) ;;
esac
done < status.tmp
阅读git status -z --porcelain
使用 bash 内置输出 read
获取我们关心的信息,然后计算我们看到的内容。 IFS
在第一次读取时,有必要避免 shell 转储前导或尾随空格。 IFS
在这种情况下,第二次读取不是绝对必要的,而是我使用的“按行读取输入”模式。
使用 bash 4 将减少重复的 case 标签集(通过使用 ;;&
)。
旁注:在 Linux 上,可以这样做:
while IFS= read -n 2 stat; IFS= read -d '' line; do
..
done < <(git status -z --porcelain)
但是 <(...)
Windows 上的 Git Bash 中未实现重定向。
关于linux - git:确定是否有文件不在 repo 协议(protocol)中,但应该添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25442356/
采用这个 repo 结构: Server (main repo) ProjectA (subrepo) SharedLibrary (subrepo) Client (main rep
我们正在尝试使用 https://grails.org/plugin/jms用于 jms 集成。但我们无法解决它。 环顾四周,我能够验证它是否存在于这个 repo 中: http://repo.gra
是否可以在现有的 Mercurial 存储库中创建 Mercurial 存储库? 这个想法是将存储库的子目录作为不同的存储库进行处理,你是如何做到的? 我不是在谈论子存储库(至少,如果我理解子存储库的
这个问题在这里已经有了答案: How do I work with a git repository within another repository? (5 个答案) 关闭 6 年前。 我想克隆
我在尝试让 ssh 在 GIT 中工作时犯了一个灾难性的错误。 我实际上将错误的 url 从服务器复制到该存储库的配置文件中。因此,我放入配置文件的 url 是一个不同但名称相似的 repo。 现在,
我们在 github 上有数百个不再使用的存档库。 默认情况下,Github 上没有 stash 存档仓库的选项。目前,通过 active repos 是不友好的,尤其是在 github 上大量滚动。
在 .repo文件: [centos] name=centos7.2 baseurl=http://10.0.0.1/centos7.2/7.2/xxx/x86_64/ enabled=
一位同事使用 repo start 创建了功能分支 thebranch。现在我想检查这个分支并对其进行处理。我试试这个: repo init -u git@gitserver:manifest.git
我在github上托管了一个项目,结构如下 github.com/example/allpackages . ├── .git └── packages ├── example-1 ├
我在github上托管了一个项目,结构如下 github.com/example/allpackages . ├── .git └── packages ├── example-1 ├
我们可以使用 hg in -vp 将我们的本地仓库与主仓库进行比较。 如何在视觉上做到这一点?我们使用 ExamDiff extension作为我们的 Mercurial 视觉差异工具。我们认为有一种
我有一个 repo 镜像服务器 (myrepo),最初创建它是为了镜像和与远程同步(repoA)。也就是说,我使用了类似下面的东西来创建它。 cd myrepo repo init -u git://
我镜像了https://github.com/boostorg/boost.git使用命令到我自己的存储库: git clone --recursive https://github.com/boos
来自 Viewing Unpushed Git Commits我知道如何区分我自己的 repo 和本地提交: git diff origin/master..HEAD 但是,我怎样才能使用 path/
我已将我的应用程序源 (git repo) 存储在文件夹中: MyProject/front_app 但在 GitHub 上,我希望将存储库命名为 front_app 而不是 my_project_f
我有一个 repo1和 repo2在本地机器上。它们非常相似,但后者是某种其他分支(不再维护 repo1)。 /path/to/repo1 $ git log HEAD~5..HEAD~4 Add:
我在 Mac OS X (10.7.3)、x64 Intel 上更新我的 Android 源代码树时遇到问题。代码是根据 Downloading the Source Tree 安装的, 并且 SE
我有两个位于不同服务器上的存储库,分别称为 repo-1 和 repo-2。 开始两个“树干”是平等的: repo-1/trunk == repo-2/trunk 与此同时,正在向 repo-1/tr
我大约在 6 个月前加入,当我到达时,我的团队没有使用任何形式的版本控制。我已经说服 mgmt 在新项目中使用 Mercurial,所以我们在我们的网络服务器上有以下结构: -MainFolder (
我正在尝试从包含通常结构(分支、标签和主干)的 repoA 迁移到仅在主干中具有子文件夹的现有 RepoB,该 RepoB 在分支、标签和主干中具有项目和代码。 我有一个通过代码创建的转储文件: sv
我是一名优秀的程序员,十分优秀!