相关疑难解决方法(0)

如何在不使用.gitignore的情况下让Git忽略文件?

由于外部奇怪的约束,我无法修改.gitignore我的存储库.有没有办法忽略文件​​和目录,而不是修改.gitignore?即使它是全局配置的全局解决方案,也将应用于我的所有存储库.

git version-control

122
推荐指数
7
解决办法
5万
查看次数

在--skip-worktree之后切换分支是不可能的

我想做的事

我有一个包含敏感数据的文件,所以我不想将此文件的内容推送到远程服务器.

我做了什么?

为了实现这一点,我在文件为空时进行了提交,并将此空文件推送到服务器(GitHub).然后用敏感数据填充文件并应用git update-index --skip-worktree path/to/file.但我没有做出任何承诺.

现在我正在尝试切换我的分支,但是我收到了这个错误:

    error: Your local changes to the following files would be overwritten by checkout:
    path/to/file
    Please, commit your changes or stash them before you can switch branches.
    Aborting
Run Code Online (Sandbox Code Playgroud)

我为什么用skip-worktreeINSTEAD OF assume-unchanged

我读了几个关于这个问题的SO问题,并找到了Borealid的答案.

--assume-unchanged假定开发人员不应更改文件.此标志用于提高SDK等不可更改文件夹的性能.

- 当你指示git不要触摸特定文件时, - skip-worktree非常有用,因为开发人员应该更改它.例如,如果主存储库上游托管了一些生产就绪配置文件,并且您不想意外地提交对这些文件的更改,那么--skip-worktree正是您想要的.

在此之后,我发现了Jeff的问题VonC的回答.杰夫的问题与我的问题几乎相同,我遵循了VonC的解决方案.但是这对我不起作用.也许是因为git版本的差异.因为这个问题来自2012年.我们与VonC进行了交谈,他说这是一个新问题,因为他不记得答案了.

我试图使用--assume-unchanged--skip-worktree 在一起,软正在重置worktree.但没有改变.

所以?

你能帮我解决一下我的问题吗?

谢谢.

git git-branch git-assume-unchanged git-skip-worktree

37
推荐指数
3
解决办法
3990
查看次数

git假设未更改vs跳过工作树 - 忽略符号链接

我有一个git存储库和Windows的问题.问题是git存储库中有一个linux符号链接,并且开发人员运行windows,这显然不起作用.现在因为这个符号链接永远不会改变,我想找到一种方法来删除开发人员并在其位置添加一个文件夹(这是符号指向的),但让git忽略这些特定的更改.现在我可以删除符号链接,创建一个同名文件夹,只需添加一个忽略所有内容的.gitignore.现在,为了确保git忽略了符号链接的删除,我在研究时发现了两种可能的解决方案.我找到的解决方案是:

git update-index --assume-unchanged [FILE]
git update-index --skip-worktree [FILE]
Run Code Online (Sandbox Code Playgroud)

我的问题是哪种方案效果最好?我想确保一旦我这样做,除非我特意这样做,否则它永远不会被撤消.我想确保恢复,重置,创建分支,合并等...一切正常.

git symlink git-index

24
推荐指数
1
解决办法
8190
查看次数

如何防止git stash删除对"假定未更改"位的文件的更改?

我已经使用git update-index --assume-unchanged了一些文件来保护我对它们的更改.

git stash在存储库中使用时,这些更改将与任何其他未完成的更改一起存储.这是预期的行为,但git stash pop不会将它们带回来,所以变化就会丢失.

任何人都知道如何防止带有assume unchanged位的文件被隐藏更改?或者,您可能知道如何确保对这些文件进行的任何更改至少会被恢复?

git version-control

23
推荐指数
1
解决办法
2228
查看次数

忽略对跟踪文件的更改,而不会导致无法“git add”文件

您可能想跳过序言。


我有一个具有以下结构的 npm 包:

lib/index.js
src/index.coffee
Run Code Online (Sandbox Code Playgroud)

源文件是一个 CoffeeScript 文件。我有一个用于从源文件构建 JavaScript 文件的 make 目标。直到最近,我在每次提交中都包含了对 JavaScript 文件的更改,但我现在将xyz与预发布脚本一起使用:

XYZ = node_modules/.bin/xyz --script scripts/prepublish

.PHONY: release-major release-minor release-patch
release-major: LEVEL = major
release-minor: LEVEL = minor
release-patch: LEVEL = patch

release-major release-minor release-patch
    @$(XYZ) --increment $(LEVEL)
Run Code Online (Sandbox Code Playgroud)

预发布脚本很简单:

#!/usr/bin/env bash
set -e

rm -f   lib/index.js
make    lib/index.js
git add lib/index.js
Run Code Online (Sandbox Code Playgroud)

这意味着每次我发布新版本(make release-patch例如通过运行)时,lib/index.js将被重建并添加到发布提交中。一切正常,直到这一点。


由于发布脚本会自动更新编译后的文件,我不再想每次提交时都手动更新它。问题是运行后make testgit statuslib/index.js列为修改后的跟踪文件。我想避免意外提交这个文件,所以我想防止它被git status.

我尝试的第一件事是添加/lib/.gitignore。但是,这不起作用,因为 …

git git-index

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

忽略Git中特定文件中的一行

我有一个文件,database.properties其中有

        password = something
Run Code Online (Sandbox Code Playgroud)

因此,每当我必须测试某些东西时,我必须将此行更改为我的本地密码.团队中的每个人都有自己的本地密码.

我想我将不得不做以下其中一项:

  1. 每次我提交我都不应该添加database.properties索引(我不想要ignore这个文件),但是当文件太多时很容易错过这个文件.

  2. 在提交之前撤消更改,但大多数时候我忘记这样做.

  3. 创建个人资料可能是实现这一目标的一种方式,但即使会有类似的问题database.properties.

我已经检查了可以git忽略一个特定的行吗?以及如何告诉git忽略单独的行,即特定行代码的gitignore.

暂时忽略文件,我看到我们可以做到

git update-index --assume-unchanged <file>
Run Code Online (Sandbox Code Playgroud)

但我每次都要这样做.

所有上述参考文献在3 - 4年之前被提出/写入.所以我只想知道如果有更好的方法可以忽略这一行.

编辑

按照@ VonC的回答,我试图添加一个过滤器 .git/info/.gitattribute

{directory_path}/database.properties filter=password // I have given the correct directory path.
Run Code Online (Sandbox Code Playgroud)

我已添加smudgeclean脚本为:

git config --global filter.password.smudge ~/smudge.sh 
git config --global filter.password.clean ~/clean.sh 
Run Code Online (Sandbox Code Playgroud)

(当我运行~/smudge.sh并且~/clean.shpassword= something正确替换了行.所以脚本是正确的.)

但是当我添加/提交时database.properties,似乎对database.properties文件没有任何影响.(我猜我~/clean.sh应该在将其添加到索引时运行)

我究竟做错了什么?

git

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

GIT忽略已使用exclude进行本地更改的提交文件

我克隆了有三个文件的远程存储库

file1.txt 
file2.txt
file3.txt
Run Code Online (Sandbox Code Playgroud)

我的机器本地更改为file3.txt.我不希望更改进入远程仓库,反之亦然.

我读到使用.gitignore,无法忽略已经提交和跟踪的文件.

我决定使用.git/info/exclude文件和以下行

排除文件

file3.txt
Run Code Online (Sandbox Code Playgroud)

但是仍然在file3.txt中进行的更改显示为非暂存文件.我希望在提交和登台时忽略此file3.txt,还需要阻止file3.txt从远程仓库更新

在此先感谢您的帮助

git

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