基本上,我要问的是gitlab或github之类的服务使用什么git命令(或命令链)来显示树状视图?
对不起,我的英语不太好,我很难提出一个清晰的问题。 也许我更愿意这样做。
说,我运行以下命令:
git init
echo readme > readme
git add readme
git commit -m 'initial commit'
echo newfile > newfile
git add newfile
git commit -m 'add newfile'
echo 'readme line 2' >> readme
git add readme
git commit -m 'add line2 in readme'
mkdir directory
echo 'file within directory' > directory/file
git add directory/file
git commit -m 'add file inside directory'
如果我运行git ls-tree HEAD
,我会得到的:
mode type hash name
------ ---- ---------------------------------------- -----------
040000 tree 1886ff20e666d42f9c4684287bd87c45d4085d1e directory
100644 blob aa39060d7ee7daa8833a5ad2354c3f77d35cac71 newfile
100644 blob 8a19af2f451dc8ba3aa509914210c759a3f7edb7 readme
如果我运行git log --pretty=oneline
,我会得到的:
commit hash commit message
---------------------------------------- -------------------------
e5791b809dbdc1c140124a822d812171bde9b1d1 add file inside directory
59a96b2dbab42d57ea74379ffb44b7ea97c75185 add line2 in readme
be90159c01a78190d32bc1b452da060d4ed61380 add newfile
2b0030b00a6b9ac56d63d3f1f2e46e7a3c796b4f initial commit
我想要得到的东西是这样的:
mode type hash name commit message commit hash
------ ---- ---------------------------------------- ----------- ------------------------- ----------------------------------------
040000 tree 1886ff20e666d42f9c4684287bd87c45d4085d1e directory add file inside directory e5791b809dbdc1c140124a822d812171bde9b1d1
100644 blob aa39060d7ee7daa8833a5ad2354c3f77d35cac71 newfile add newfile be90159c01a78190d32bc1b452da060d4ed61380
100644 blob 8a19af2f451dc8ba3aa509914210c759a3f7edb7 readme add line2 in readme 59a96b2dbab42d57ea74379ffb44b7ea97c75185
看到了吗?每棵树的节点显示相关的/最后的提交。就像gitlab或github 做。现在,回到我的问题:什么git命令(或命令链)做一个 gitlab或github之类的服务用于显示树状视图?
答案 0 :(得分:0)
好的,我找到了解决方案:
# dim: batch_size x batch_max_len x embedding_dim
答案 1 :(得分:0)
根据mas-bagol的回答,对于遇到此问题的其他人,以下内容将包含git commit消息:
# makes for loop works line by line
OIFS=$IFS
IFS=$'\n'
# assuming $COMMIT is a valid commit-ish
for line in $(git ls-tree $COMMIT)
do
filename=$(echo $line | cut -f 2)
# non filename components, tab separated
node=$(echo $line | cut -f 1 | tr -s ' ' '\t')
# Output latest entry, with requested fields tab separated
log_entry=$(git log --format="%H\t%f" -n 1 -- $COMMIT $filename)
echo -e "$node\t$log_entry\t$filename"
done
IFS=$OIFS
这将提供以下行的输出:
100644 blob 7bfa463a30fd3c5a1e58cdbd64695e0981eea7e0\
1506412d4638d3a8d0f9e3ee87e55c1a5d0af582 initial commit README.md
格式为:
<mode> TAB <type> TAB <object> TAB <commit hash> TAB <commit message> TAB <file>
使用git版本2.24.1测试