如何保持,但不跟踪GitHub上的文件



我有一个共享的初始化脚本,其中包含用户特定的内容,我想与我的团队作为模板共享,但不是每个人都用自己的电子邮件地址不断更新。

  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.shgit_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上。

希望有帮助,

欢呼

最新更新