我有一个共享初始化脚本,其中包含我希望与我的团队共享的特定于用户的内容作为模板,但并不是每个人都会继续使用他们的说法,自己的电子邮件地址进行更新。
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!
答案 0 :(得分:2)
我有一个非常相似的问题,我有一些"易于构建"我想在树中提供的shell脚本,我希望人们可能会改变,但我不希望他们在工作时提交更改。
我在项目中解决这个问题的方法是使用git update-index --assume-unchanged
来保护构建脚本(在适当的时候)。
我在存储库的根目录中创建了两个bash脚本git_assume_build_scripts_unchanged.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 --assume-unchanged *build*.sh
git update-index --assume-unchanged Toolchain-*.cmake
git update-index --assume-unchanged set_*_env_vars.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
脚本。
答案 1 :(得分:0)
你可能正在寻找的是:
git update-index --assume-unchanged <file>
然后,当你想要与之相反时,你可以这样做:
git update-index --no-assume-unchanged <file>
这将保留repo上的文件与最后一个版本之前 - 保持文件不变。
希望有所帮助,
干杯