我有一個設置(它需要這樣),我正在同步更新的文件到git存儲庫。這發生在文件更改時,並且在此同步過程中忽略.git
文件夾。`git reset --hard`會爲我改變嗎?
所以
- 客戶機(與回購結帳)>文件同步(忽略的.git)>服務器(帶有回購結帳)
- 客戶>上游git倉庫(不時)
- 上游git倉庫>服務器(從時間到時間)
有些時候,我需要基於上游上server
更新GIT中,所以我使用git fetch --all && git reset --hard origin/branchname
。哪些工作爲此目的。
但是,我希望能夠檢測到,如果這實際上更新任何文件或沒有。 換句話說,如果客戶端文件同步是最新的,與上游混帳回購協議,我想檢測吧..
要做到這一點,因爲我能找到的最接近的方式是一個答案here這是使用類似git merge-tree $(git merge-base FETCH_HEAD master) FETCH_HEAD master
。但問題是,它顯示了變化,即使該文件和內容已經存在......
與測試用例
$ { ~/repos }$ mkdir a && cd a
$ { ~/repos/a }$ git init
Initialized empty Git repository in ~/repos/a/.git/
$ { ~/repos/a }$ echo file1 > f1 && git add f1 && git commit -m "1"
[master (root-commit) 9b1b025] ..
1 file changed, 1 insertion(+)
create mode 100644 f1
$ { ~/repos }$ git clone a b
Cloning into 'b'...
done.
$ { ~/repos }$ cd b
$ { ~/repos/b }$ ls
f1
$ { ~/repos/a }$ echo file2 > f2 && git add f2 && git commit -m "2"
[master 4e40da5] 2
1 file changed, 1 insertion(+)
create mode 100644 f2
$ { ~/repos/b }$ git fetch --all
Fetching origin
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From ~/repos/a
9b1b025..4e40da5 master -> origin/master
# The folder `b` started with 1 file `f1`, and it can now
# see the new file `f2` as expected.
$ { ~/repos/b }$ git diff HEAD..origin/master
diff --git a/f2 b/f2
new file mode 100644
index 0000000..6c493ff
--- /dev/null
+++ b/f2
@@ -0,0 +1 @@
+file2
# Without using git (another file sync job, think rsync),
# the `f2` is created identical, but without informing git.
# After this, the repos contains the exact same data,
# but git doesn't know that.
$ { ~/repos/b }$ echo file2 > f2
# However, git diff still thinks this file is new..
# At this point, I want to be able to see if
# the origin/master is identical to the content of this repository.
$ { ~/repos/b }$ git diff HEAD..origin/master
diff --git a/f2 b/f2
new file mode 100644
index 0000000..6c493ff
--- /dev/null
+++ b/f2
@@ -0,0 +1 @@
+file2
# Untill I do a reset --hard
$ { ~/repos/b }$ git reset --hard origin/master
HEAD is now at 4e40da5 2
# Doesn't show any output
$ { ~/repos/b }$ git diff HEAD..origin/master
所以......你想知道'origin/branchname'與'branchname'不同嗎?那不就是'git diff branchname origin/branchname'嗎?我錯過了關於這個問題的東西......? –
請注意,'git reset --hard'會重置索引和工作樹中存儲的文件(無論出自所選提交的文件),因此如果您的文件與任何提交中的文件不同,那麼這些文件也會得到改變。 – torek