Answers:
.gitignore
可以通过运行以下命令来代替本地git存储库:
git update-index --assume-unchanged <file>
在这种情况下,将在原始存储库中跟踪文件。您可以在本地存储库中对其进行修改,而git绝不会将其标记为已更改。阅读更多信息:
git update-index --no-assume-unchanged <file>
。如果要列出它们git ls-files -v | grep '^h'
。
允许文件存在而忽略文件所做的更改是的确切目的.gitignore
。因此,添加文件(或目录).gitignore
是您唯一要做的事情。
但是您的问题是git已经在跟踪您要忽略的文件,.gitignore
并且不适用于跟踪的文件。停止此跟踪的唯一方法是告诉git删除它们。通过使用git rm --cached
,可以防止git删除本地文件,但是其他任何进行更改的存储库都将应用删除。我认为没有办法从您自己的存储库中避免这种情况。您必须在其他存储库上执行某些操作,否则接受文件将被删除。
为了防止在彼此的存储库上被删除,您可以:
git rm --cached
文件并在拉出更改之前提交。Git会很好地合并这两个删除内容,而不会涉及到已经未跟踪的文件。git update-index --assume-unchanged <file>
。看看:blog.pagebakers.nl/2009/01/29/…–
git rm --cached <filename> -r
在此推送再次更改为repositorie之后,将文件删除了
/
在.gitignore
文件中目录名称的末尾放置一个,即
tmp/
如果已经在该目录中跟踪了文件,则需要告诉git首先忘记它们(在将目录添加到忽略列表之前)。假设您那里没有任何重要的东西(即您可以刮擦它):
git rm -rf ./tmp/
git commit -m "untrack tmp dir"
mkdir tmp
echo tmp/ >> .gitignore
git add .gitignore ; git commit -m "add tmp/ to ignore list"
该目录中的新文件将不会被跟踪。
仅对索引有效的--cached
选项git rm
(或多或少地等待更改)。它对工作树或已跟踪或未跟踪的状态没有影响。
the/dir/
和the/dir/*
.gitignore对跟踪的文件没有影响。
您想要的是在tmp /目录中的文件上设置假定不变的位。这里有一个很好的解释,该如何做:Git:仅在本地存储库中取消跟踪文件,并将其保存在远程存储库中
同样,用于设置目录的所有文件的一线假定不变-git update-index --assume-unchanged on directory。
听起来您正在尝试跟踪文件(例如index.php
),将其添加到远程存储库,然后停止监视跟踪,同时将文件保留在远程位置(即index.php
,在本地更改文件时,在远程仓库上保持不变)。
据我了解,git无法做到这一点。您可以跟踪文件,也可以不跟踪。如果跟踪文件,则该文件将存在于远程存储库中,并且在提交对文件的更改后即会更改。如果您不跟踪文件,则该文件在远程存储库中不存在。
由于无法完全使用git做您想做的事,因此根据您的实际情况,可能还有其他解决方案。例如,为什么index.php
在本地更改时不希望在远程上更改?文件中是否有用户特定的设置?在这种情况下,您可以执行以下操作:
cp index.php index_template.php
git rm --cached index.php
现在,将index_template.php编辑为您希望它出现在远程仓库中。在自述文件中添加一些内容,以告知使用您的存储库的人员克隆后,必须将index_template.php复制到index.php并对其进行编辑以适合他们的需求。
git add index_template.php
git add README
git commit -m 'added template index.php file'
git push
当某人克隆您的仓库时,他们必须创建自己的仓库index.php
。你很容易使之成为他们:简单地复制index_template.php
到index.php
与计算机特定的设置进行修改。