出于某种原因,当我最初从存储库中获取我的git项目时,我在工作副本中获得了大量文件,这些文件没有对它们进行任何可识别的更改,但是仍然在我的unstaged changes区域中出现.
我在Windows XP上使用Git Gui,当我去查看文件时看看有什么变化.我只看到:
old mode 100755
new mode 100644
Run Code Online (Sandbox Code Playgroud)
有谁知道这意味着什么?
如何从我的未分级更改列表中获取这些文件?(非常讨厌必须通过100个文件,只是挑选我最近编辑过的文件并想要提交).
我有一个git checkout.所有文件权限都不同于git认为应该是的权限,因此它们都显示为已修改.
在不触及文件内容的情况下(只想修改权限)如何将所有文件权限设置为git认为应该是什么?
我正在使用git版本1.5.6.3,似乎git没有注意到文件夹的模式更改
#create a test repository with a folder with 777 mode
:~$ mkdir -p test/folder
:~$ touch test/folder/dummy.txt
:~$ cd test
:~/test$ chmod 777 folder/
#init git repository
:~/test$ git init
Initialized empty Git repository in ~/test/.git/
:~/test$ git add .
:~/test$ git commit -m 'commit a directory'
Created initial commit 9b6b21a: commit a directory
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 folder/dummy.txt
#change folder permission to 744
:~/test$ chmod 744 folder/
:~/test$ git status
# On …Run Code Online (Sandbox Code Playgroud) 编辑:
请参阅Danny Lin的git-store-meta作为下面描述的版本控制元数据问题的建议解决方案.我还没有测试它在2015-05-13.
原始问题:
输出中的create|delete mode ...行git commit(下面的示例)是否代表某种元数据控制?(和/或,这些线通常代表什么?)这些似乎是类似unix的文件 - 权限代码/表示,虽然我不确定 - 确切地说 - 映射,但更大的问题是:如果有什么做的话git 做这些代码/设置/值?git是否试图以任何方式利用这些保存的代码来证明有助于解决元数据问题我的superuser.com问题["如何重用/扩展etckeeper的元数据引擎,用于git控制非/ etc文件系统,或者使用所述功能本地扩展git ?"(https://superuser.com/questions/367729/how-to-reuse-extend- etckeepers-metadata-engine-for-git-control-of-non-etc-file)?我知道git不能控制所有文件系统元数据.
[Git显然已经控制了文件的"可执行属性/ perm"(对于大多数操作系统来说显然是可移植的)以及其他一些文件系统链接.我正在寻找更多/所有元数据的更多Unix/Linux/BSD/DarwinMacOSX特定控制机制,即所有权限和用户/组所有权.ACL和其他元数据控制可选.试图查看git 当前存储的东西是否有助于解决这个问题.]
root@node1 Dec 15 09:40:45 ~/.../sandbox-1# git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: README
# new file: dummy-file-will-be-removed
# deleted: ownerfile
#
root@node1 Dec 15 09:40:45 ~/.../sandbox-1# git commit -m "testing git"
[master c5b0201] testing …Run Code Online (Sandbox Code Playgroud) 在我提交一些文件之前,如何才能看到文件权限更改为文件?我有一些git status说已更改的文件,应该添加到commit但是git diff没有显示任何内容.谢谢
Git跟踪文件权限,我明白了什么0644意思但10这个例子中的主要含义是什么?
4 files changed, 201 insertions(+), 14 deletions(-)
create mode 100644 my_file
Run Code Online (Sandbox Code Playgroud) 在 Git 中,命令返回的典型结果git ls-files -s行如下所示
100755 be2c2e9b0966253096472d4b482c458bc892e493 0 .gitignore
Run Code Online (Sandbox Code Playgroud)
这些字段是什么意思?
git 中状态码“C”和“T”是如何触发的?有人可以给我一组非常简单的运行命令来模拟所需的步骤,以便在运行时git log --name-status看到上面的状态代码吗?我尝试过复制文件并更改已被跟踪的文件的扩展名类型,但它只是标记为已修改或已添加。
https://git-scm.com/docs/git-diff
\n\n\n\n\n仅选择已添加 (A)、已复制 (C)、已删除 (D)、\n 已修改 (M)、已重命名 (R) 且具有其类型的文件(即常规文件、\n 符号链接、子模块、\xe2\x80 \xa6\xe2\x80\x8b) 已更改 (T)、未合并 (U)、未知\n (X),或者其配对已损坏 (B)。可以使用过滤字符的任意组合(包括无)。当 * (All-or-none)\n 添加到组合中时,如果有任何\n 文件与比较中的其他条件匹配,则选择所有路径;如果没有\n 与其他条件匹配的文件,则不会选择任何内容。
\n
谢谢
\n在本书的git内部章节中,git-scm有一个如何创建git树的示例:
Git normally creates a tree by taking the state of your staging area or index and writing a series of tree objects from it. So, to create a tree object, you first have to set up an index by staging some files.
然后他们列出了我可以用来创建树的命令.我的问题是我是否可以在不使用索引(临时区域)的情况下创建树?例如,而不是这样做:
git update-index --add --cacheinfo 100644 83baae618... test.txt
Run Code Online (Sandbox Code Playgroud)
使用这样的东西:
git create tree --add --cacheinfo 100644 83baae618... test.txt
Run Code Online (Sandbox Code Playgroud)
基于Ismail Badawi的anser 更新:
$ echo 'making tree' | git hash-object -w --stdin
07dae42a0730df1cd19b0ac693c6894a02ed6ad0
Run Code Online (Sandbox Code Playgroud)
然后
$ …Run Code Online (Sandbox Code Playgroud) git ×10
diff ×1
directory ×1
file ×1
filesystems ×1
git-diff ×1
git-gui ×1
git-ls-files ×1
logging ×1
metadata ×1
mode ×1
permissions ×1