在已经跟踪大量文件的现有存储库上应用.gitignore

cig3rfwq  于 2023-01-15  发布在  Git
关注(0)|答案(7)|浏览(118)

我的存储库中已经有一个Visual Studio项目,我最近在项目下添加了一个.gitignore文件,我假设这会告诉Git忽略该文件中列出的文件。
我的问题是所有这些文件都已经被跟踪了,而且据我所知,Git不会忽略一个在添加忽略规则之前已经被跟踪的文件。
建议用途:git rm --cached并手动取消跟踪它们,但这将花费我永远通过他们一个接一个。
我考虑过删除存储库并重新创建它,但这次使用.gitignore文件,但一定有更好的方法来做到这一点。

bgtovc5b

bgtovc5b1#

这个answer解决了我的问题:
首先,提交所有待定更改。
然后运行以下命令:

git rm -r --cached .

这将删除索引中的所有内容,然后运行:

git add .

承诺:

git commit -m ".gitignore is now working"

请注意,当您将此文件推送到存储库并从其他位置拉入到仍然跟踪这些文件的状态时,这些文件将被删除

kupeojn6

kupeojn62#

1.创建一个.gitignore文件,为此,您只需创建任何空白的.txt文件。
1.然后,您必须在cmd中写入以下行来更改它的名称(其中git.txt是您刚刚创建的文件的名称):
rename git.txt .gitignore
1.然后你可以打开文件,写入所有你想永远忽略的未跟踪文件。例如,我的文件如下所示:

#OS junk files
    [Tt]humbs.db
    *.DS_Store
    
    #Visual Studio files
    *.[Oo]bj
    *.user
    *.aps
    *.pch
    *.vspscc
    *.vssscc
    *_i.c
    *_p.c
    *.ncb
    *.suo
    *.tlb
    *.tlh
    *.bak
    *.[Cc]ache
    *.ilk
    *.log
    *.lib
    *.sbr
    *.sdf
    *.pyc
    *.xml
    ipch/
    obj/
    [Bb]in
    [Dd]ebug*/
    [Rr]elease*/
    Ankh.NoLoad
    
    #Tooling
    _ReSharper*/
    *.resharper
    [Tt]est[Rr]esult*
    
    #Project files
    [Bb]uild/
    
    #Subversion files
    .svn
    
    # Office Temp Files
    ~$*

有一个whole collection of useful .gitignore files by GitHub
1.一旦你有了这个文件,你需要像其他文件一样把它添加到你的git仓库,只是它必须在仓库的根目录下。
1.然后在你的终端中你必须写下面的行:
git config --global core.excludesfile ~/.gitignore_global
来自官方文件:
您也可以创建一个全局.gitignore文件,它是一个忽略您计算机上每个Git存储库中文件的规则列表。例如,您可以在~/.gitignore_global中创建该文件并添加一些规则。
打开终端。在终端中运行以下命令:git配置--全局核心. excludes文件~/.gitignore_global
如果存储库已存在,则必须运行以下命令:

git rm -r --cached .
git add .
git commit -m ".gitignore is now working"

如果步骤2不起作用,那么你应该写你想添加的文件的孔路径。

xnifntxz

xnifntxz3#

如指定here您可以更新索引:

git update-index --assume-unchanged /path/to/file

这样,文件就不会显示在git statusgit diff中。
要再次开始跟踪文件,您可以运行:

git update-index --no-assume-unchanged /path/to/file
cngwdvgl

cngwdvgl4#

如果你添加.gitignore的时间太晚,git会继续跟踪已经提交的文件。要解决这个问题,你可以删除所有缓存中不需要的文件。
首先,要检查您实际跟踪的是哪些文件,可以运行:
git ls-tree --name-only --full-tree -r HEAD
假设您在cache/这样的目录中发现了不需要的文件,因此,将该目录作为目标比将所有文件作为目标更安全。
因此,代替:
git rm -r --cached .
定位不需要的文件或目录更安全:
git rm -r --cached cache/
然后继续添加所有更改,
git add .
并承诺...
git commit -m ".gitignore is now working"
参考:https://amyetheredge.com/code/13.html

xmd2e60i

xmd2e60i5#

下面是一种“取消跟踪”任何文件的方法,否则这些文件将在当前排除模式下被忽略:

(GIT_INDEX_FILE=some-non-existent-file \
git ls-files --exclude-standard --others --directory --ignored -z) |
xargs -0 git rm --cached -r --ignore-unmatch --

这会将文件保留在工作目录中,但会将其从索引中删除。
这里使用的技巧是给git ls-files提供一个不存在的索引文件,这样它就认为没有被跟踪的文件。上面的shell代码要求所有在索引为空时会被忽略的文件,然后使用git rm将它们从实际的索引中删除。
文件被“untracked”后,使用git status确认没有重要的东西被删除(如果是,调整排除模式,使用git reset -- path恢复被删除的索引项),然后重新提交一次,去掉“crud”。
如果你真的需要一个干净的历史记录,你可以使用git filter-branch来生成旧提交的干净版本(注意,使用git filter-branch会“重写历史”,所以如果你有合作者在“crud”首次出现后拉过你的历史提交,你不应该轻易这么做)。

rlcwz9us

rlcwz9us6#

使用git clean
获取有关此跑步的帮助

git clean -h

如果您想先看看会发生什么,请确保通过-n开关进行空运行:

git clean -xn

清除垃圾

git clean -xdf

注意:您可能会忽略本地配置文件,如数据库。yml,这也将被删除。使用风险自担。
然后

git add .
git commit -m ".gitignore is now working"
git push
ejk8hzay

ejk8hzay7#

我认为这是一种将 *. gitignore * 文件添加到现有存储库的简单方法。

    • 先决条件**:

你需要一个浏览器来访问你的github账户。

    • 步骤**

1.在所需(现有)项目中创建一个新文件,并将其命名为***. gitignore***。将文件命名为 *. gitignore * 后,您将收到提示输入. gitignore模板的提示。请使用这些模板或使用gitignore.io生成 * gitignore * 文件的内容。
1.提交更改。
1.现在克隆此存储库。
好好玩!

相关问题