最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

解決.gitignore不起作用的辦法

2023-04-05 13:25 作者:有AI野心的電工和碼農(nóng)  | 我要投稿

本文是15年時(shí)網(wǎng)上搜集來的2篇的合集,加上了一點(diǎn)自己的理解。

第一篇segmentfault回答中,對(duì)git update-index --assume-unchanged的詳解,看似有點(diǎn)跑題但很有價(jià)值

第一篇

Original address:http://segmentfault.com/q/1010000000430426

Q:

現(xiàn)在項(xiàng)目的根目錄放了.gitignore文件,并且git遠(yuǎn)程倉庫的項(xiàng)目根目錄已經(jīng)有了logs文件夾。

由于每次本地運(yùn)行項(xiàng)目,都會(huì)生成新的log文件,但是我并不想提交logs文件夾里面的內(nèi)容,所以要在.gitignore寫logs的規(guī)則。

我嘗試過添加以下規(guī)則

logs/*.log

logs/

/logs/

但是運(yùn)行g(shù)it status的時(shí)候,始終能看到modified:logs/xx.log 。

請(qǐng)問是我的規(guī)則編寫錯(cuò)誤,還是我某個(gè)地方有理解錯(cuò)誤?

A:

正確的做法應(yīng)該是:

  1. git rm --cached logs/xx.log,

  2. 然后更新.gitignore忽略掉目標(biāo)文件,

  3. 最后git commit -m "We really don't want Git to track this anymore!"

具體的原因如下:

被采納的答案雖然能達(dá)到(暫時(shí)的)目的,但并非最正確的做法,這樣做是誤解了git update-index的含義,而且這樣做帶來的最直接(不良)后果是這樣的:

  1. 所有的團(tuán)隊(duì)成員都必須對(duì)目標(biāo)文件執(zhí)行:git update-index --assume-unchanged <PATH>。這是因?yàn)榧词鼓阕?Git 假裝看不見目標(biāo)文件的改變,但文件本身還是在 Git 的歷史記錄里的,所以團(tuán)隊(duì)的每個(gè)人在 fetch 的時(shí)候都會(huì)拉到目標(biāo)文件的變更。(但實(shí)際上目標(biāo)文件是根本不想被 Git 記錄的,而不是假裝看不見它發(fā)生了改變)

  2. 一旦有人改變目標(biāo)文件之后沒有git update-index --assume-unchanged <PATH>就直接push了,那么接下來所有拉取了最新代碼的成員必須重新執(zhí)行update-index,否則 Git 又會(huì)開始記錄目標(biāo)文件的變化。這一點(diǎn)實(shí)際上很常見的,比如說某成員換了機(jī)器或者硬盤,重新clone了一份代碼庫,由于目標(biāo)文件還在 Git 的歷史記錄里,所以他/她很可能會(huì)忘記update-index

為什么會(huì)這樣?答案就在 Git 的man pages里:

首先,git update-index的定義是:

Register file contents in the working tree to the index(把工作區(qū)下的文件內(nèi)容注冊(cè)到索引區(qū))

這句話暗含的意思是:update-index針對(duì)的是 Git 數(shù)據(jù)庫里被記錄的文件,而不是那些需要忽略的文件。

接著看關(guān)于--assume-unchanged的幾句相關(guān)的描述:

When the "assume unchanged" bit is on, Git stops checking the working tree files for possible modifications, so you need to manually unset the bit to tell Git when you change the working tree file. This is sometimes helpful when working with a big project on a filesystem that has very slow lstat(2) system call (e.g. cifs).

大致意思是:

應(yīng)用了該標(biāo)識(shí)之后,Git 停止查看工作區(qū)文件可能發(fā)生的改變,所以你必須手動(dòng)重置該標(biāo)識(shí)以便 Git 知道你想要恢復(fù)對(duì)文件改變的追蹤。當(dāng)你工作在一個(gè)大型項(xiàng)目中,這在文件系統(tǒng)的lstat系統(tǒng)調(diào)用非常遲鈍的時(shí)候會(huì)很有用。

我們知道 Git 不僅僅是用來做代碼版本管理的,很多其他領(lǐng)域的項(xiàng)目也會(huì)使用 Git。比如說我公司曾經(jīng)一個(gè)客戶的項(xiàng)目涉及到精密零件圖紙文檔的版本管理,他們也用 Git。有一種使用場(chǎng)景是對(duì)一些體積龐大的文件進(jìn)行修改,但是每一次保存 Git 都要計(jì)算文件的變化并更新工作區(qū),這在硬盤慢的時(shí)候延遲卡頓非常明顯。

git update-index --assume-unchanged的真正用法是這樣的:

  1. 你正在修改一個(gè)巨大的文件,你先對(duì)其 git update-index --assume-unchanged,這樣 Git 暫時(shí)不會(huì)理睬你對(duì)文件做的修改;

  2. 當(dāng)你的工作告一段落決定可以提交的時(shí)候,重置改標(biāo)識(shí):git update-index --no-assume-unchanged,于是 Git 只需要做一次更新,這是完全可以接受的了;

  3. 提交+推送。

另外,根據(jù)文檔的進(jìn)一步描述:

This option can be also used as a coarse file-level mechanism to ignore uncommitted changes in tracked files (akin to what .gitignore does for untracked files).

這段描述告訴我們兩個(gè)事實(shí):

  1. 雖然可以用其來達(dá)成樓主想要的結(jié)果,但這是不講究的做法(coarse);

  2. 同樣的事情更應(yīng)該用.gitignore文件來實(shí)現(xiàn)(針對(duì)未追蹤的文件)。

隨之而來的問題是:為什么我增加了.gitignore里的規(guī)則卻沒有效果?

這是因?yàn)槲覀冋`解了.gitignore文件的用途,該文件只能作用于Untracked Files,也就是那些從來沒有被 Git 記錄過的文件(自添加以后,從未 add 及 commit 過的文件)。

之所以你的規(guī)則不生效,是因?yàn)槟切?.log?文件曾經(jīng)被 Git 記錄過,因此.gitignore對(duì)它們完全無效。這也正是開頭那段簡短答案所做的事情:

  1. 從 Git 的數(shù)據(jù)庫中刪除對(duì)于該文件的追蹤;

  2. 把對(duì)應(yīng)的規(guī)則寫入.gitignore,讓忽略真正生效;

  3. 提交+推送。

只有這樣做,所有的團(tuán)隊(duì)成員才會(huì)保持一致而不會(huì)有后遺癥,也只有這樣做,其他的團(tuán)隊(duì)成員根本不需要做額外的工作來維持對(duì)一個(gè)文件的改變忽略。

最后有一點(diǎn)需要注意的,git rm --cached刪除的是追蹤狀態(tài),而不是物理文件;如果你真的是徹底不想要了,你也可以直接rm+忽略+提交

My的理解:在添加 .gitignore 文件之前,已經(jīng)track的文件,是不可能再被ignore的了,只有從git的數(shù)據(jù)庫中刪除掉 欲被忽略的文件 的追蹤,才可讓.gitignore文件中的配置生效。

第二篇 關(guān)于使用Github,gitignore不起作用的解決方法

Original address:?http://niltor.net/index.php/Home/Blog/showblog?id=5

點(diǎn)評(píng): 這是一種比較簡單直接粗暴的作法,從git庫中刪除目錄下所有文件的記錄,再重新add。

NilTor @ 2014-08-08 16:50:55 | 最后編輯:2014-08-08 16:50:55

摘要: 前段時(shí)間gitignore文件不起作用的問題讓我很頭疼,我需要在不同的電腦上,不同的操作系統(tǒng)中同步代碼.必須會(huì)忽略一些文件的.經(jīng)過搜索,終于找到了解決的辦法.

直接上解決方法:

解釋:

.gitignore文件,具體的規(guī)則一搜就有.

我在使用GIT的過程中,明明寫好了規(guī)則,但問題不起作用,每次還是重復(fù)提交,無法忍受.

其實(shí)這個(gè)文件里的規(guī)則對(duì)已經(jīng)追蹤的文件是沒有效果的.

所以我們需要使用rm命令清除一下相關(guān)的緩存內(nèi)容. 這樣文件將以未追蹤的形式出現(xiàn).

然后再重新添加提交一下, .gitignore文件里的規(guī)則就可以起作用了.


解決.gitignore不起作用的辦法的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
读书| 壤塘县| 泰宁县| 澄迈县| 吐鲁番市| 双城市| 岳阳市| 宜章县| 高邮市| 高青县| 惠州市| 盐边县| 犍为县| 会东县| 宝应县| 商丘市| 临沂市| 金门县| 滨海县| 习水县| 天柱县| 万源市| 汨罗市| 新化县| 定远县| 汾西县| 额敏县| 日喀则市| 青川县| 固阳县| 安阳县| 饶河县| 丰宁| 中江县| 福鼎市| 肇州县| 哈巴河县| 佛山市| 柏乡县| 开平市| 阿尔山市|