我有一个共享的初始化脚本,其中包含用户特定的内容,我想与我的团队作为模板共享,但不是每个人都用自己的电子邮件地址不断更新。
echo "myname" > testfile
git add testfile
git commit -m "Add a user-specific file"
git push push origin master
echo "testfile" >> .gitignore
git add .gitignore
git commit -m "Ignore user-specific file"
git rm --cached testfile
# Showing that testfile is staged as deleted!
我有一个非常类似的问题,我有一些"容易构建"的shell脚本,我想在树中提供,我希望人们可能会改变,但我不希望他们在工作时提交更改。
我在我的项目中解决这个问题的方法是使用git update-index --assume-unchanged
来保护构建脚本(在适当的时候)。
我在仓库的根目录下创建了两个bash脚本,git_assume_build_scripts_unchanged.sh
和git_undo_assume_build_scripts_unchanged.sh
,它们看起来像这样:
git_assume_build_scripts_unchanged.sh
#!/bin/bash
set -e
# Cause git to assume that all build scripts are unchanged, so that you can use "git add ." syntax to commit
# without committing local changes to the build scripts
git update-index --assume-unchanged *build*.sh
git update-index --assume-unchanged Toolchain-*.cmake
git update-index --assume-unchanged set_*_env_vars.sh
git_undo_assume_build_scripts_unchanged.sh
#!/bin/bash
set -e
# Cause git to assume that all build scripts are unchanged, so that you can use "git add ." syntax to commit
# without committing local changes to the build scripts
git update-index --no-assume-unchanged *build*.sh
git update-index --no-assume-unchanged Toolchain-*.cmake
git update-index --no-assume-unchanged set_*_env_vars.sh
这个想法是,如果有人需要修改本地机器的构建脚本,或修改cmake工具链文件,或类似的,他们运行第一个脚本。git update-index --assume-unchanged
使git标记文件,因此,如果它们在索引中被更改,即使它们被跟踪,这些更改也不会被git检测到,并且在使用git add .
或类似的方法时不会被分级。
如果有人需要撤销更改,他们可以使用undo
脚本。
你可能要找的是这个:
git update-index --assume-unchanged <file>
然后,当你想要相反的,你可以这样做:
git update-index --no-assume-unchanged <file>
这将在你——假设——修改文件之前将文件保存在最后一个版本的repo上。
希望有帮助,
欢呼