有没有办法git status忽略文件中的某些更改?
背景
我的存储库中有一些自动生成的文件(是的,我知道通常不推荐这样做,但我无权更改它)。每当我构建我的树时,这些自动生成的文件都会更新其中的状态信息(谁生成它们、时间戳等)。
当我说 时git status,我希望它对这些生成的文件运行过滤器,以去除这些瞬态信息。"Changed but not updated:"如果有其他真正的更改,我只希望它显示在git 的输出部分。
使用https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes 上的.gitattributes方法,我可以使用简单的过滤器忽略这些状态行更改。我还想使用过滤器(或类似的东西)。git diffegrepgit statustextconv
如果合并不受任何这种过滤的影响,我更喜欢它。
我做了 git status 命令并得到这个:
# "public/images/wallpaper/wait/1920\321\2051080.jpg"
# public/style.css
Run Code Online (Sandbox Code Playgroud)
为什么有些文件在引号之间?以及如何将它们添加到 .gitignore 中?
我已经开始使用Git,因为我认为它是一个更好的版本控制器.
有人可以帮我理解git status -s符号的含义吗?
我目前维护一个针对bash的git-prompt的项目(https://github.com/magicmonty/bash-git-prompt),我刚收到一个bug报告(https://github.com/magicmonty/bash-git -prompt/issues/97)来自与Docker合作的人,他告诉我,每次使用提示时,缓存都会失效,因为.git目录经常被触及.
我已经调查了这一点,并发现它是git status触及.git目录的命令.似乎只有目录条目本身和没有内容被触及.任何人都可以解释,为什么需要这个,或者这可能是Git中的一个错误.
有没有办法显示所有状态信息,而无需触及.git目录?
谢谢您的帮助
更新:
由于使用该git status命令的全部原因是,为了确定未跟踪文件的数量,我将其替换为git ls-files --others --exclude-standard | wc -l,不需要锁定.
我有一个包含许多分支的存储库.所有分支都与等效的远程分支保持同步.
例如,请参阅以下两个分支的git status和git log的输出:
分支mantis_0074
mchaleg@ELT-L-0018 ~/Documents/BitBucket/electroroute_repositories/gudrun (mantis_0074)
$ git status
On branch mantis_0074
nothing to commit, working directory clean
mchaleg@ELT-L-0018 ~/Documents/BitBucket/electroroute_repositories/gudrun (mantis_0074)
$ git log --oneline --decorate
a67b6f7 (HEAD, origin/mantis_0074, mantis_0074) M-0074: Update expected results from sample bids.
afda69c M-0074: Rename long and short term intra-day BritNed auction files to use the correct name format so that they will be processed correctly (i.e. not handled as
bcc41 M-0074: Add unprocessed files which can be used for testing amp_file_transfer.ps1 script. …Run Code Online (Sandbox Code Playgroud) 已知 git-status 通过检查对象的大小和修改时间来发现对象已更改。有时它不起作用,例如用于限制性文件系统上的存储库等。如何通过计算 SHA-1 总和来强制 git-status 检查实际差异?这将更长,但仍然是上述用例的解决方案。
这里已经提出了类似的问题,但我认为它被误解了(或者也许我误解了这个问题)。那我就在这里问清楚吧。当我这样做时git status,我会得到一条线(除其他外),告诉我我是否落后于我正在跟踪的远程分支(或从其分叉)。这很棒。然而,我有不止一个遥控器。我有一个“官方”遥控器(来源),它是共享的(只有当东西“准备好”时我才推送到那里),还有一个“个人”遥控器(工作),我用它从家庭/工作中推送东西,所以当我切换电脑时我可以继续工作。现在,当我这样做时git status,会将本地分支与origin/branch_name(或我正在跟踪的任何远程分支)进行比较。然而,我也想将它与其他遥控器/分支进行比较,但不拉动,只是比较。理想情况下,我想做这样的事情:
git fetch work
git status work/branch_name
Run Code Online (Sandbox Code Playgroud)
并获取我的本地分支与 work/branch_name 的状态比较。
请注意,我不想进行比较,也就是说,我对哪些文件/路径不同不感兴趣。我只是想看看两个分支是否/何时分叉,或者一个分支是否领先于另一个分支。
另请注意,我可以使用图形方式获取此信息gitk --all,查看两个分支在树中的位置,但我想从命令行执行此操作。另外,如果有多个分支,显示的树gitk --all可能会很混乱。
谢谢
我正在开发用于创建程序发行版的Powershell脚本。为了做到这一点,我想检查git工作树是否干净,并且没有未提交的更改。
我已经阅读了这篇文章,但它与bash有关。
如何从Powershell脚本内部检查git工作树是否干净并且有任何可提交的内容?我不在乎未跟踪的文件。
我已经尝试过类似
$gitOutput = (git status -z) | Out-String
if ($gitOutput) {
"output"
} else {
"no Output"
}
Run Code Online (Sandbox Code Playgroud)
问题是,output当所有内容都提交但有一些未跟踪的文件时,我也会打印,这是我要避免的事情。我想忽略未跟踪的文件,仅检查是否提交了所有跟踪的文件。
如果我运行这个命令:
$ git status
Run Code Online (Sandbox Code Playgroud)
我得到:
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
Run Code Online (Sandbox Code Playgroud)
这很难解析。
但真正好的是 --json 输出,在另一个世界中,我很想看到:
$ git status --json
Run Code Online (Sandbox Code Playgroud)
得到这个:
{
"currentBranch": "master",
"remoteTrackingBranch": "origin/master",
"isUpToDateWithRemote": true,
"workingDirectoryClean": true
}
Run Code Online (Sandbox Code Playgroud)
NPM 生态系统中是否有一些工具可以将 Git 输出解析为 JSON?解析来自git status等的输出的最佳方法是什么?
找不到我的问题所以我想我会问。
我自己和另一个人正在开发这个仓库。我的本地克隆是最新的。
我的伙伴删除了文件“example.txt”,提交并推送了它。
第二天我进来,执行 git status(最新),然后执行 git pull。它从我的本地存储库中删除“example.txt”。
问题是我需要该文件,但我的伙伴不小心删除了它。
我该如何防止将来再发生这种情况?有没有办法让 git pull 在删除某些内容之前先警告我?
因此,我尝试先执行 git fetch,然后执行 git status,但它并没有表明如果合并,我将删除文件。