sda*_*aau 17 git version-control
这是一个简短的代码段示例(您可以将其粘贴到Linux终端中),创建一个新的git存储库并向其添加一些文件(使用git版本1.7.9.5):
cd /tmp/
mkdir myrepo_git
cd myrepo_git/
git init
git config user.name "Your Name"
git config user.email you@example.com
echo "test" > file_tracked_unchanged.txt
echo "test" > file_tracked_changed.txt
echo "test" > file_untracked.txt
git add file_tracked_unchanged.txt
git add file_tracked_changed.txt
git commit -m "initial commit"
Run Code Online (Sandbox Code Playgroud)
现在,在初始提交之后,我想要更改file_tracked_changed.txt文件,并保持其他(此处,仅file_tracked_unchanged.txt)在下一次提交时保持不变.下面是一个片段,演示了git statusvs git ls-files(gitshell输出的前缀是多种输出#):
echo "test more" >> file_tracked_changed.txt
git status -uno
# # 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)
# #
# # modified: file_tracked_changed.txt
# #
# no changes added to commit (use "git add" and/or "git commit -a")
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)
# #
# # modified: file_tracked_changed.txt
# #
# # Untracked files:
# # (use "git add <file>..." to include in what will be committed)
# #
# # file_untracked.txt
# no changes added to commit (use "git add" and/or "git commit -a")
git status -uno --short
# M file_tracked_changed.txt
git status --short
# M file_tracked_changed.txt
# ?? file_untracked.txt
git ls-files -v
# H file_tracked_changed.txt
# H file_tracked_unchanged.txt
git add file_tracked_changed.txt
git status -uno
# # On branch master
# # Changes to be committed:
# # (use "git reset HEAD <file>..." to unstage)
# #
# # modified: file_tracked_changed.txt
# #
# # Untracked files not listed (use -u option to show untracked files)
git status
# # On branch master
# # Changes to be committed:
# # (use "git reset HEAD <file>..." to unstage)
# #
# # modified: file_tracked_changed.txt
# #
# # Untracked files:
# # (use "git add <file>..." to include in what will be committed)
# #
# # file_untracked.txt
git status -uno --short
# M file_tracked_changed.txt
git status --short
# M file_tracked_changed.txt
# ?? file_untracked.txt
git ls-files -v
# H file_tracked_changed.txt
# H file_tracked_unchanged.txt
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是一个命令,它将显示目录中的所有跟踪文件(git ls-files -v确实如此),具有准确的存储库状态(git ls-files未显示,因为它显示H为所有跟踪文件的状态).例如,我想获得类似伪代码的东西:
git status-tracked
# M file_tracked_changed.txt
# . file_tracked_unchanged.txt
Run Code Online (Sandbox Code Playgroud)
...其中点.是一个符号,表示一个跟踪但未更改的文件(如果我没记错的话,SVN可能会使用一个U字符).
最后,我还要显示目录中所有文件的状态,如伪代码:
git status-tracked-and-untracked
# M file_tracked_changed.txt
# . file_tracked_unchanged.txt
# ?? file_untracked.txt
Run Code Online (Sandbox Code Playgroud)
...但是对于我来说,获取所有跟踪文件的状态更为重要,如git status-tracked上面的伪.
任何命令git,已经做了这样的事情?
谢谢@sdaau.我做了一些更改,以便它运行得更快,并以相同的格式提供结果git status:
git ls-files | while read -r line;
do
st=$(git status -s "$line");
if [ -n "$st" ]; then
echo "$st";
else
echo " $line";
fi;
done
Run Code Online (Sandbox Code Playgroud)
And*_*mar -1
git status -s | egrep -v '^\?\?'
Run Code Online (Sandbox Code Playgroud)
这会过滤掉以 开头的行??,即未跟踪的文件。
| 归档时间: |
|
| 查看次数: |
11367 次 |
| 最近记录: |