mow*_*ker 17 git version-control
我在理解基本的git概念时遇到了一些麻烦:/
在我的git控制的网站上尝试一些东西之前,我正在我的本地Windows机器上进行测试.
我有:
gittesting/repo1:
file.txt
ignoreme:
ignore.txt
Run Code Online (Sandbox Code Playgroud)
和
gittesting/repo2
file.txt
ignoreme:
ignore.txt
Run Code Online (Sandbox Code Playgroud)
Repo2是repo1的副本,并且已经跟踪了ignoreme.ignore.txt文件在repo2中被更改,但我想停止跟踪它并让git完全忽略它.问题是,如果我创建一个.gitignore文件并添加ignoreme,它已经太晚了,因为它已经被跟踪了,所以我不得不做git rm --cached ignore,但是它被标记为已删除,如果我将提交删除repo1,该目录将被删除而不是被单独留下..
把它们加起来:
我在网上看过,在IRC问过,并查看了相关的问题,但找不到办法做到这一点.我知道这个例子似乎微不足道,但这正是我需要在我的网站上做的事情,目录是论坛/缓存.
编辑:
这有点像黑客,我更喜欢更好的答案,但我最终做了:
cd repo2
echo "ignoreme" > .gitignore
echo "ignoreme/*" > .gitignore
git rm --cache -r ignoreme
git commit -m "Should ignore now"
cd ../repo1
mv ignoreme ignoreme2
git pull ../repo2
mv ignoreme2 ignoreme
Run Code Online (Sandbox Code Playgroud)
Mic*_*ior 19
试试这个
git update-index --assume-unchanged ignoreme/ignore.txt
Run Code Online (Sandbox Code Playgroud)
如果不更改存储库,Git将忽略此文件的任何未来更改.要再次开始跟踪更改,请使用
git update-index --no-assume-unchanged ignoreme/ignore.txt
Run Code Online (Sandbox Code Playgroud)
请注意,这仅对当前工作副本生效,因此每次克隆存储库时都需要执行此操作.
如果我正确理解您的问题,您想repo2了解该ignoreme/目录,但您不希望Git关心对该目录的任何修改.并且git rm --cached对你没有帮助,因为你告诉Git 从现在开始停止跟踪这些内容.
Git用于跟踪内容但通过子模块修复的解决方案.除了Git Book之外,这个解释了(重点补充):
尽管
rack是工作目录中的子目录,但Git将其视为子模块,并且当您不在该目录中时不会跟踪其内容.相反,Git将其记录为来自该存储库的特定提交.
您可以尝试以下方法:
将ignoreme/目录复制到新位置,并使其成为git存储库
将其作为子模块添加回repo2:
git submodule add file:///path/to/ignoreme ignoreme
git commit -m"Add ignoreme/ as a submodule"
Run Code Online (Sandbox Code Playgroud)在ignoreme现在子模块固定在特定的提交.repo2仍在跟踪子模块内的任何内容,但除非您在子模块中提交ignoreme/,repo2否则不会跟踪对文件的任何更改.让我们说ignoreme/ignore.txt以某种方式修改:
$ git status
# On branch master
# 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)
# (commit or discard the untracked or modified content in submodules)
#
# modified: ignoreme (modified content)
#
no changes added to commit (use "git add" and/or "git commit -a")
Run Code Online (Sandbox Code Playgroud)
即使您运行git add .,更改ignoreme/ignore.txt也不会添加到索引中,除非它们像这样提交到子模块:
$ cd ignoreme
$ git commit -am"Time to change ignore.txt"
$ cd ..
$ git add .
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: ignoreme
#
Run Code Online (Sandbox Code Playgroud)
但是,如果您想忘记子模块中的本地修改:
$ cd ignoreme
$ git reset --hard
$ cd ..
Run Code Online (Sandbox Code Playgroud)